您的位置:首页 > 其它

自定义拦截器实现权限管理

2011-11-11 12:05 405 查看
自定义拦截器实现权限管理:

如果用户登录后可以访问action中的所有方法。

--用户登录后,在session中设置用户的状态

如果用户没有登录不允许访问action中的方法,并且提示“你没有权限执行该操作”。

通过jsp页面设置用户的登录或退出状态。

要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口:

package cn.itcast.interceptor;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.Interceptor;

public class PermissionInterceptor implements Interceptor
{

private static final long serialVersionUID = 1L;

@Override

public void destroy() {

}

@Override

public void init() {

}

@Override

public String intercept(ActionInvocation invocation) throws Exception {

Object user = ActionContext.getContext().getSession().get("user");

// 如果user不为null,代表用户已经登录,执行action中的方法

if (user!=null) {

// 执行被拦截到的方法,所返回的字符串即为执行action所返回的字符串

return invocation.invoke();

}

else

{

ActionContext.getContext().put("message", "你没有权限执行该操作");

}

return "message"; // 返回一个视图,提示让用户登录,该视图最好定义为全局的视图,因为很多页面会返回该视图

}

}

struts.xml中增加设置:

<package name="interceptor" namespace="/control/employee" extends="global">

<interceptors>

<interceptor name="permission" class="cn.itcast.interceptor.PermissionInterceptor" />

<interceptor-stack name="permissionStack">

<!-- 拦截器栈中将系统的拦截器放在最前面,因为放在前面的先执行 -->

<interceptor-ref name="defaultStack"/>

<interceptor-ref name="permission"/>

</interceptor-stack>

</interceptors>

<action name="list_*" class="cn.itcast.action.FileUploadAction" method="{1}">

<!-- Struts2中如果为某个action指定了拦截器,则Struts2核心的拦截器将会不起作用 -->

<!-- 所以在这里使用拦截器栈 -->

<interceptor-ref name="permissionStack" />

</action>

</package>

说明:

因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的众多功能。

如果希望包下的所有action都使用自定义的拦截器,可以通过<default-interceptor-ref name=“permissionStack”/>把拦截器定义为默认拦截器。注意:每个包只能指定一个默认拦截器。另外,一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用。

message.jsp:

<body>

${message}

</body>

访问以前的页面:http://localhost:8080/struts2/control/employee/list_execute.action

页面提示:你没有权限执行该操作

增加两个jsp文件,分页用于设置用户登录、用户退出:

userlogin.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%

request.getSession().setAttribute("user", "itcast");

%>

用户已经登录。

userlogout.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%

request.getSession().removeAttribute("user");

%>

用户已经退出。

访问过userlogin.jsp后,action正常执行。

访问过userlogout.jsp后,提示“你没有权限执行该操作”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: