zoukankan      html  css  js  c++  java
  • 自定义拦截器用于用户登录的

     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     }
  • 相关阅读:
    装饰器模式
    观察者模式
    策略模式
    分析法汇总
    事后诸葛亮分析(名字好难想队)
    团队项目第六周——Alpha阶段项目复审(名字很难想队)
    团队博客(第五周)-“名字好难想”
    团队博客(第四周)-“名字好难想”
    团队博客(第三周)-“名字好难想”
    团队博客(第二周)-“名字好难想”
  • 原文地址:https://www.cnblogs.com/friends-wf/p/3766425.html
Copyright © 2011-2022 走看看