自定义拦截器用于用户登录的

 1  2     1、编写一个类,实现com.opensymphony.xwork2.interceptor.Interceptor
 3     2、主要实现public String intercept(ActionInvocation invocation) throws Exception{}方法
 4         该方法的返回值就相当于动作的返回值
 5         如果调用了String result = invocation.invoke();得到了动作类的返回的值。
 6     public String intercept(ActionInvocation invocation) throws Exception {
 7         //判断用户是否登录
 8         HttpSession session = ServletActionContext.getRequest().getSession();
 9         Object obj = session.getAttribute("user");
10         if(obj==null){
11             return "login";
12         }else{
13             return invocation.invoke();//调用动作方法
14         }
15     }
16     3、拦截器定义好后,一定要在配置文件中进行注册:
17         <interceptors> 只是定义拦截器,并没有起作用 
18             <interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
19         </interceptors>
20     4、配置文件中的动作,要通过
21         <interceptor-ref name="permissionInterceptor"></interceptor-ref>使用该拦截器
22     注意:一旦动作中使用了自定义的拦截器,那么默认的就不起作用了。一般应该采用如下的做法:
23         <interceptor-ref name="defaultStack"></interceptor-ref>
24         <interceptor-ref name="permissionInterceptor"></interceptor-ref>
25         
26     多个动作类都要使用的话,可以通过package来进行组合。

 struts.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
 4     "http://struts.apache.org/dtds/struts-2.1.7.dtd">
 5 <struts>
 6     <constant name="struts.devMode" value="true"></constant>
 7 <!--    <constant name="struts.ui.theme" value="simple"></constant>-->
 8 
 9     <package name="mydefault" extends="struts-default">
10         <interceptors>
11             <interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
12             <interceptor-stack name="mydefaultstack">            <!-- 集总定义的栈内容   -->
13                 <interceptor-ref name="defaultStack"></interceptor-ref>
14                 <interceptor-ref name="permissionInterceptor"></interceptor-ref>
15             </interceptor-stack>
16         </interceptors>
17     </package>
18     <package name="user" namespace="/user" extends="mydefault">
19         <action name="login" class="cn.itcast.domain.User" method="login">  <!--用于处理 login.jsp 中提交的表单,登录的请求-->
20             <result name="success">/</result>
21             <result name="login">/login.jsp</result>
22         </action>
23         <action name="user_*" class="cn.itcast.domain.User" method="{1}">
24             <interceptor-ref name="mydefaultstack"></interceptor-ref>      <!--拦截器 引用-->
25             <result name="success">/listUsers.jsp</result>
26             <result type="redirectAction" name="delOk">user_listUsers</result>
27             <result name="input">/{1}.jsp</result>
28             <result name="saveOk">/success.jsp</result>
29             <result name="editOk">/success.jsp</result>
30             <result name="editUI">/editUser.jsp</result>
31             <result name="showUser">/showUser.jsp</result>
32             <result name="login">/login.jsp</result>          <!--让拦截器 找的结果-->
33         </action>
34         <action name="download" class="cn.itcast.domain.User" method="download">
35             <interceptor-ref name="mydefaultstack"></interceptor-ref>              <!-- 方便使用一个  -->
36             <result type="stream" name="success">
37                 <param name="contentType">application/octet-stream</param>
38                 <param name="inputStream">inputStream</param><!-- 输入是对应的动作类中的那个字段-->
39                 <param name="contentDisposition">attachment;filename=${filename}</param><!-- 要下载的文件名-->
40             </result>
41             <result name="login">/login.jsp</result>
42         </action>
43     </package>
44 </struts>

 java文件

 1 package cn.itcast.interceptor;
 2 
 3 import javax.servlet.http.HttpSession;
 4 
 5 import org.apache.struts2.ServletActionContext;
 6 
 7 import com.opensymphony.xwork2.ActionInvocation;
 8 import com.opensymphony.xwork2.interceptor.Interceptor;
 9 
10 public class PermissionInterceptor implements Interceptor {
11 
12     @Override
13     public void destroy() {
14 
15     }
16 
17     @Override
18     public void init() {
19         System.out.println("PermissionInterceptor intercept         init");
20     }
21 
22     @Override
23     public String intercept(ActionInvocation invocation) throws Exception {
24         System.out.println("PermissionInterceptor intercept         ");
25         HttpSession session = ServletActionContext.getRequest().getSession();
26         Object obj = session.getAttribute("user");
27         if(obj==null){
28             return "login";        //返回到 struts.xml中对应的   action下面的result name="longin" 页面
29         }else{
30             return invocation.invoke();
31         }
32     }
33 
34 }

User.java中的

 1     public String login()
 2     {
 3         User user=service.login(username, password);
 4         if(user==null)
 5             return LOGIN;
 6         else
 7         {
 8             ServletActionContext.getRequest().getSession().setAttribute("user", user);
 9             return SUCCESS;
10         }
11     }
原文地址:https://www.cnblogs.com/friends-wf/p/3766425.html