实例功能:当用户登陆后,session超时后则返回到登陆页面重新登陆。

为了更好的实现此功能我们先将session失效时间设置的小点,这里我们设置成1分钟

修改web.xml

view plaincopy to clipboardprint?
 <session-config>  
<session-timeout>1</session-timeout>  
</session-config> 
  <session-config>
 <session-timeout>1</session-timeout>
 </session-config>

此实例用到的jsp页面及登陆所涉及到的相关代码请参考:

Struts2自定义拦截器实例—登陆权限验证

实现自定义拦截器类

view plaincopy to clipboardprint?
package com.ywjava.interceptor;  
 
import java.util.Map;  
 
import com.opensymphony.xwork2.Action;  
import com.opensymphony.xwork2.ActionContext;  
import com.opensymphony.xwork2.ActionInvocation;  
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
import com.ywjava.action.LoginAction;  
import com.ywjava.utils.Constants;  
 
public class SessionIterceptor extends AbstractInterceptor {  
 
    @Override  
    public String intercept(ActionInvocation actionInvocation) throws Exception {  
        ActionContext ctx = ActionContext.getContext();  
        Map session = ctx.getSession();  
        Action action = (Action) actionInvocation.getAction();  
        if (action instanceof LoginAction) {  
            return actionInvocation.invoke();  
        }  
        String userName = (String) session.get(Constants.USER_SESSION);  
        if (userName == null) {  
            return Action.LOGIN;  
        } else {  
            return actionInvocation.invoke();  
        }  
    }  
 

package com.ywjava.interceptor;

import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.ywjava.action.LoginAction;
import com.ywjava.utils.Constants;

public class SessionIterceptor extends AbstractInterceptor {

@Override
 public String intercept(ActionInvocation actionInvocation) throws Exception {
  ActionContext ctx = ActionContext.getContext();
  Map session = ctx.getSession();
  Action action = (Action) actionInvocation.getAction();
  if (action instanceof LoginAction) {
   return actionInvocation.invoke();
  }
  String userName = (String) session.get(Constants.USER_SESSION);
  if (userName == null) {
   return Action.LOGIN;
  } else {
   return actionInvocation.invoke();
  }
 }

}

struts.xml中定义并使用此拦截器

view plaincopy to clipboardprint?
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE struts PUBLIC  
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
    "http://struts.apache.org/dtds/struts-2.1.dtd">  
<struts>  
    <package name="authority" extends="struts-default">  
      
        <!-- 定义一个拦截器 -->  
        <interceptors>  
            <interceptor name="authority" 
                class="com.ywjava.interceptor.LoginInterceptor">  
            </interceptor>  
            <interceptor name="sessionout" 
             class="com.ywjava.interceptor.SessionIterceptor"></interceptor>  
            <!-- 拦截器栈 -->  
            <interceptor-stack name="mydefault">  
                <interceptor-ref name="defaultStack" />  
                <interceptor-ref name="authority" />  
                <interceptor-ref name="sessionout"/>  
            </interceptor-stack>  
        </interceptors>  
 
        <!-- 定义全局Result -->  
        <global-results>  
            <!-- 当返回login视图名时,转入/login.jsp页面 -->  
            <result name="login">/login.jsp</result>  
        </global-results>  
 
        <action name="loginform" 
            class="com.ywjava.action.LoginFormAction">  
            <result name="success">/login.jsp</result>  
        </action>  
          
        <action name="login" class="com.ywjava.action.LoginAction">  
            <result name="success">/welcome.jsp</result>  
            <result name="error">/login.jsp</result>  
            <result name="input">/login.jsp</result>  
        </action>  
 
        <action name="show" class="com.ywjava.action.ShowAction">  
            <result name="success">/show.jsp</result>  
            <!-- 使用此拦截器 -->  
            <interceptor-ref name="mydefault" />  
        </action>  
          
    </package>  
</struts> 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
 "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
 <package name="authority" extends="struts-default">
 
  <!-- 定义一个拦截器 -->
  <interceptors>
   <interceptor name="authority"
    class="com.ywjava.interceptor.LoginInterceptor">
   </interceptor>
   <interceptor name="sessionout"
    class="com.ywjava.interceptor.SessionIterceptor"></interceptor>
   <!-- 拦截器栈 -->
   <interceptor-stack name="mydefault">
    <interceptor-ref name="defaultStack" />
    <interceptor-ref name="authority" />
    <interceptor-ref name="sessionout"/>
   </interceptor-stack>
  </interceptors>

<!-- 定义全局Result -->
  <global-results>
   <!-- 当返回login视图名时,转入/login.jsp页面 -->
   <result name="login">/login.jsp</result>
  </global-results>

<action name="loginform"
   class="com.ywjava.action.LoginFormAction">
   <result name="success">/login.jsp</result>
  </action>
  
  <action name="login" class="com.ywjava.action.LoginAction">
   <result name="success">/welcome.jsp</result>
   <result name="error">/login.jsp</result>
   <result name="input">/login.jsp</result>
  </action>

<action name="show" class="com.ywjava.action.ShowAction">
   <result name="success">/show.jsp</result>
   <!-- 使用此拦截器 -->
   <interceptor-ref name="mydefault" />
  </action>
  
 </package>
</struts>

当我们登陆后一分钟不做任何操作刷新后则会跳转到登陆页面

struts2自定义拦截器 设置session并跳转的更多相关文章

  1. Struts2透过自定义拦截器实现登录之后跳转到原页面

    Struts2通过自定义拦截器实现登录之后跳转到原页面 这个功能对用户体验来说是非常重要的.实现起来其实很简单. 拦截器的代码如下: package go.derek.advice; import g ...

  2. Struts2自定义拦截器Interceptor以及拦截器登录实例

    1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...

  3. 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】

    一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...

  4. Struts2 自定义拦截器

    自定义拦截器(权限管理),包含了对ajax和表单请求的拦截 package com.interceptor; import java.io.IOException; import java.io.Pr ...

  5. struts2自定义拦截器与cookie整合实现用户免重复登入

    目的:测试开发时,为了减少用户登入这个繁琐的登入验证,就用struts2做了个简单的struts2拦截器,涉及到了与cookie整合,具体的看代码 结构(两部份)=struts2.xml+自定义拦截器 ...

  6. Struts2自定义拦截器处理全局异常

    今天在整理之前的项目的时候想着有的action层没有做异常处理,于是想着自定义拦截器处理一下未拦截的异常. 代码: package cn.xm.exam.action.safeHat; import ...

  7. Struts2自定义拦截器——完整实例代码

    比如一个网上论坛过滤系统,将网友发表的不文明.不和谐的语言,通过拦截器对这些文字进行自动替代. 该项目包含: 1.自定义拦截器(MyInterceptor.java) 2.发表评论的页面(news.j ...

  8. 12.Struts2自定义拦截器

    12.自定义拦截器        拦截器是Struts2的一个重要特性.因为Struts2的大多数核心功能都是通过拦截器实现的. 拦截器之所以称之为“拦截器”,是因为它可以拦截Action方法的执行, ...

  9. Struts2自定义拦截器

    1. 需求 自定义拦截器实现,用户登录的访问控制. 2. 定义拦截器类 public class LoginInterceptor extends AbstractInterceptor { @Ove ...

随机推荐

  1. DPL, CPL及RPL之间的关系

    DPL: Descriptor Privilege Level 1) GDT/LDT表中的描述符 GDT/LDT表中的描述符,描述的是一段内存. 其中的DPL代表着GDT/LDT中的描述符描述的内存段 ...

  2. 03、python的基础-->str字符串的使用

    1.字符串首字母大写 s = "aksjdjjhfhdhjaGGGGkkk" s1 = s.capitalize() print(s1) 2.字符串全部字母大写 s = " ...

  3. 慎用margin系列1---CSS的margin塌陷(collapse) 问题与对策

      对于以下简单代码: 如果您认为应该是这样的话: 那就错了.结果是这样的: 因为CSS中存在一个margin collapse,即边界塌陷或者说边界重叠.对于上下两个并列的div块而言,上面div的 ...

  4. jmeter 5 参数化

    文件: 文件编码 注意: 如果文件另存为utf-8,文件第一行头会带bom头(不可见字符),jmeter读取参数后,会把头读取到请求报文中,提示不存在该用户 什么是bom头? 在utf-8编码文件中B ...

  5. lg5169 xtq的异或和

    题目 根据一些众所周知的结论,我们先跑一棵生成树出来,之后把所有简单环都搞出来,那么\(u\)到\(v\)的路径一定可以由树上的路径和一些简单环拼起来得到 把所有简单环都插到一个线性基里,之后dfs一 ...

  6. Pyinstaller 打包exe 报错 "failed to execute script XXX"的一种解决方案

    最近用PyQt5写了一个界面小程序,需要打包成exe给到其他windows上使用,一开始使用python 3.7 64位,用pyinstaller打包exe,在64位机上运行正常. 但是目标电脑是32 ...

  7. 统计List中相同的元素

    public static <E> List<E> getCommonsElements(List<E> list) { return list.stream() ...

  8. 使用ReadStream方法读取文件事件传递过程

    const fs = require('fs'); let file = fs.createReadStream("filename.js"); file.on("ope ...

  9. glog 与 zlog

    1.linux 源码调用 2.log 3级 info error debug 3.调用便利性 4.配置文件 动态加载 5.输出 log 文件 (大小 时间) 6大批量写入 (100条一次写入) 7设置 ...

  10. PHP-移除元素

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...