您的位置:首页 > 其它

使用拦截器进行权限的控制

2015-05-10 23:14 483 查看
检查用户是否登陆,通常是跟踪用户的session来完成的,通过ActionContext既可以访问session中的属性,拦截器的intercept(ActionInvocation invocation)方法的invocation参数又可以很轻易的访问到请求相关的ActionContext实例,因此这个具有权限控制的拦截器代码,可以如下这样子写:

package com.inter;

import java.util.Map;

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class CheckInterceptor extends AbstractInterceptor {

private static final long serialVersionUID = 1L;

@Override

public String intercept(ActionInvocation invocation) throws Exception {

ActionContext actionContext = invocation.getInvocationContext();

Map<?, ?> sessionMap = actionContext.getSession();

String user = (String)sessionMap.get("name");

if(user != null && user.equals("admin")){

return invocation.invoke();

}

actionContext.put("message", "please login in!");

return Action.LOGIN;

}

}

在上面的intercept方法中队session中是否存在admin用户做了验证,如果用户名是admin,那么就是合法的用户,

即可以跳转到loginsuccess.jsp页面,否则跳转到LOGIN,并指出错误的信息,下面附上UserAction.java

package com.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

private static final long serialVersionUID = 1L;

private String name;

private String pass;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPass() {

return pass;

}

public void setPass(String pass) {

this.pass = pass;

}

@SuppressWarnings("unchecked")

@Override

public String execute() throws Exception {

ActionContext actionContext = ActionContext.getContext();

if (getName().equals("admin") && getPass().equals("admin")) {

Map sessionMap = actionContext.getSession();

sessionMap.put("name", getName());

return SUCCESS;

} else {

actionContext.put("meessage", "the username or the password is failed!");

return ERROR;

}

}

}

上面的代码中将用户名和密码都是admin的用户都保存到的session中,以便于拦截器的验证,

下面各处三个视图,login.jsp,loginsuceess.jsp,info.jsp的代码:

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>test</title>

</head>

<body>

<h1>用户登录</h1>

<font color="red">${requestScope.message}</font>

<s:form id="id" action="login">

<s:textfield name="name" label="用户名"></s:textfield>

<s:password name="pass" label="密码"></s:password>

<s:submit value="注册"></s:submit>

</s:form>

<a href=chakan.action>查看</a>

</body>

</html>

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>拦截器权限控制</title>

</head>

<body>

你已成功登录系统!<a href=chakan.action>查看</a>

</body>

</html>

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

</head>

<body>

系统主页!。。。

</body>

</html>

配置权限控制拦截器

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>

<package name="hellointerceptor" extends="struts-default">

<interceptors>

<interceptor name="loginInterceptor" class="com.inter.CheckInterceptor">

</interceptor>

</interceptors>

<action name="login" class="com.action.UserAction">

<result name="error">/login.jsp</result>

<result name="success">/loginsuccess.jsp</result>

</action>

<action name="chakan">

<result>/info.jsp</result>

<result name="login">/login.jsp</result>

<interceptor-ref name="defaultStack"></interceptor-ref>

<interceptor-ref name="loginInterceptor"></interceptor-ref>

</action>

</package>

</struts>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: