struts2是目前java开发中流行的控制层框架,取代了原先的servlet。struts2的惊天创举就是采用了一系列拦截器,对前台请求进行一系列处理, 这一创举开启了面向切面编程的时代,也体现了一种成熟的架构思想。
废话少说,show my code,首先在web层定义一个权限拦截器,如下:
public class PrivilegeInterceptor extends MethodFilterInterceptor{ @Override protected String doIntercept(ActionInvocation invocation) throws Exception { //获得session,获得登陆标识 User user = (User) ActionContext.getContext().getSession().get("user"); //判断标识是否存在 if(user != null){ //已登陆 return invocation.invoke();//放行 }else{ //不存在 return "toLogin"; } } }
在web.xml中配置struts2拦截器
<package name="crm" namespace="/" extends="struts-default"> <!-- 拦截器配置 --> <interceptors> <!-- 注册自定义拦截器 --> <interceptor name="myInter" class="com.iteason.web.PrivilegeInterceptor"></interceptor> <!-- 注册自定义拦截器栈 --> <interceptor-stack name="myStack"> <!-- 引入自定义拦截器 --> <interceptor-ref name="myInter"> <!-- 配置不拦截的方法 --> <param name="excludeMethods">login.regist</param> </interceptor-ref> <!-- 引入默认的拦截器栈 --> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 指定默认自定义的拦截器栈为默认拦截器栈 --> <default-interceptor-ref name="myStack"></default-interceptor-ref> //lots of actions </package>
这样就可以用struts2实现权限管理了。
配置顺序:
--》配置拦截器
|--》注册自定义拦截器
|--》注册自定义拦截器栈
|--》引入自定义拦截器并配置拦截方法
|--》引入struts2的默认拦截器栈
--》配置拦截器
--》指定默认拦截器栈
注意
1、自定义的拦截器必须实现的是MethodFilterInterceptor类
2、自定义拦截器栈必须引入struts的默认拦截器
3、这些配置都在某一package下