Struts2自定义拦截器(实现没有登录情况下只能访问登录页面)

来源:互联网 发布:用织梦cms做仿站 编辑:程序博客网 时间:2024/06/06 04:28

一:首先新建拦截器类,实现AbstractInterceptor类

package cn.itcast.interceptor;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.ActionProxy;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class UserCheckInterceptor extends AbstractInterceptor{/** * 拦截器业务处理方法 */public String intercept(ActionInvocation invocation) throws Exception {// 拿到当前执行的方法名:判断,只有当前方法名不是login,就进行验证(验证若没有登录过,则跳转到登录页面。若已经登录//  ,则放行  )// 1.获取ActionContext对象ActionContext ac = invocation.getInvocationContext();// 2,获取action的代理对象 ActionProxy proxy = invocation.getProxy(); //3,获取当前执行的方法名 String methodName = proxy.getMethod(); // 判断 if (!"login".equals(methodName)) { // 先获取当前登陆的用户(在session中获取) User obj = ac.getSession().get("userInfo"); if (obj == null) { // 没有登陆 return "input"; } else { // 当前用户有登陆 return invocation.invoke();  //直接放行 } } else { // 说明当前用户正在登陆 return invocation.invoke();   //直接放行 }}}

二:在struts.xml文件中配置新建的拦截器类,让struts知道

配置文件如下所示:

<struts><package name="user" extends="struts-default"><span style="color:#cc0000;"><!-- 1.【拦截器配置】 --></span><interceptors><interceptor name="loginCheck" class="cn.itcast.interceptor.UserCheckInterceptor"></interceptor><interceptor-stack name="myStack"><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="loginCheck"></interceptor-ref></interceptor-stack></interceptors>
<!-- <span style="color:#cc0000;">2.【执行拦截器:</span><span style="color:#33cc00;">第一种写法</span>: 当前包下所有的action都执行myStack栈】<default-interceptor-ref name="myStack"></default-interceptor-ref> --><!-- 全局配置 --><global-results><result name="error">/error.jsp</result></global-results><action name="user_*" class="cn.itcast.action.UserAction" method="{1}"><!--<span style="color:#33cc00;">第二种写法</span>: 只是在这一个Action中执行myStack栈 <interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="loginCheck"></interceptor-ref>--><!-- <span style="color:#33cc00;">第三种写法</span>:执行用户栈(与第二种写法一样, 只在当前aciton中执行自定义栈) --><interceptor-ref name="myStack"></interceptor-ref><!-- 1. 登陆失败 --><result name="input">/login.jsp</result><!-- 2. 登陆成功 --><result name="loginSuccess" type="redirectAction">user_list</result><!-- 3. 列表展示 --><result name="list">/WEB-INF/list.jsp</result></action></package></struts>





0 0
原创粉丝点击