struts2拦截器使用(用户session失效后的统一页面指向)

用户登录之后session我们设置一定的时间失效,失效后页面的转向问题一般都是跳回主页或者是我们自定义的页面

action:

package com.tkbs.web.interceptors;

import java.util.Date;
import java.util.Map;

import javax.annotation.Resource;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.tkbs.domain.user.UserAccounts;
import com.tkbs.service.user.UserService;

/**
* 用户拦截器
* author zxg
* version 1.0
*/
public class UserInterceptor implements Interceptor {

private static final long serialVersionUID = 5582842221490358379L;

public void destroy() {

}

/**
* 在服务启动的时候执行
*/
public void init() {
}

public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println(
"<<<教师拦截器初始化...");

ActionContext ctx
= ActionContext.getContext();
Map session
= ctx.getSession();
// sessionUser 如果session中不存在用户在返回index视图
if (session.get("sessionUser")== null) {
return "index";
}
String result
= actionInvocation.invoke();
return result;
}
}

如果注册页面的请求也包含在拦截器的拦截中加以判断:

package com.tkbs.web.interceptors;

import java.util.Date;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.tkbs.domain.user.UserAccounts;
import com.tkbs.service.user.UserService;

/**
* 用户拦截器
* author zxg
* version 1.0
*/

public class UserInterceptor implements Interceptor {

private static final long serialVersionUID = 5582842221490358379L;

public void destroy() {

}

/**
* 在服务启动的时候执行
*/
public void init() {
}

public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println(
"<<<教师拦截器初始化...");

ActionContext ctx
= ActionContext.getContext();
Map session
= ctx.getSession();
// sessionStudent
if (session.get("sessionUser")== null) {

//判断是不是注册用户,如果是注册用户(包含userRegisterPage)则继续执行,否则跳转到index视图
HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
String uri
= request.getRequestURI();
if(uri.indexOf("userRegistPage") == -1) {
return "index";
}
}
String result
= actionInvocation.invoke();
return result;
}
}

这里用户的拦截器定义在user包下

User包下拦截器
<!-- user 包配置 -->
<package name="user" extends="myDefault" namespace="/user">
<interceptors>
<interceptor name="userInterceptor"
class
="com.tkbs.web.interceptors.UserInterceptor">
</interceptor>
<interceptor-stack name="userStack">
<interceptor-ref name="userInterceptor"></interceptor-ref>
<interceptor-ref name="myDefaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 默认拦截器,此包下所有的ACTION将都被拦截。如果ACTION再定义了拦截器,则失效 -->
<default-interceptor-ref name="userStack"></default-interceptor-ref>
<global-results>
<!-- 首页-->
<result name="index">/index.jsp</result>
</global-results>
<!-- *_*_*
页面转向${ctp}/page/resource_queryResource_resourceList
...actions.page.resource.queryResource[method=resourceList]
...actions.page.resource.queryResourceDetial[method=resourceDetial]
-->
<action name="*_*_*" class="{2}Action" method="{3}">
<result name="update" type="redirectAction">
<param name="actionName">
userDiary_userDiary_diaryShow
</param>
<param name="namespace">/user</param>
<param name="parse">true</param>
<param name="diaryId">${diaryId}</param>
<param name="userId">${userId}</param>
</result>
<!-- page 与包相应 -->
<result name="{3}" type="dispatcher">
/modulePage/{1}/{3}.jsp
</result>
<!-- json -->
<result name="json" type="json" />
<!-- user -->
<result name="pwdUpOff" type="redirectAction">
<param name="namespace">/user</param>
<param name="actionName">
userUser_user_userIndex
</param>
<param name="parse">true</param>
</result>
</action>
</package>

全局拦截器的定义:

全局拦截器:
<!-- default (全局)包配置 -->
<package name="myDefault" extends="json-default" namespace="/">
<interceptors>
<interceptor name="configInterceptor"
class
="com.tkbs.web.interceptors.ConfigInterceptor">
</interceptor>
<!-- 默认的必须放在最下面! -->
<interceptor-stack name="myDefaultStack">
<interceptor-ref name="configInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 默认拦截器,此包下所有的ACTION将都被拦截。如果ACTION再定义了拦截器,则失效 -->
<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
<global-results>
<!-- 首页-->
<result name="index">/index.jsp</result>
<result name="adminLoginPage">
/moduleAdmin/index/adminLogin.jsp
</result>
</global-results>
<!-- 用户登录 login_adminLogin/userLogin-->
<action name="login_*" class="loginAction" method="{1}">
<!-- 前台用户登录 userLogin-->
<result name="loginMessage" type="json"></result>
<result name="adminLogSuccess" type="redirectAction">
<param name="actionName">
index_indexManage_adminIndex
</param>
<param name="namespace">/admin</param>
</result>
<result name="adminLoginIn">
/moduleAdmin/index/adminIndex.jsp
</result>
<result name="adminLoginPage">
/moduleAdmin/index/adminLogin.jsp
</result>
</action>
<!-- 用户退出登录-->
<action name="existLogin_*" class="existLoginAction"
method
="{1}">
<result name="index">/index.jsp</result>
</action>
</package>

Struts2分别对Request、Session和Application三个对象封装成了三个Map对象,直接使用封装好的Map对象来读取和保存数据。可以通过com.opensymphony.xwork2.ActionContext类来得到这三个对象。ActionContext是Action执行的上下文,保存了很多对象如parameters、request、session、application和locale等。通过ActionContext类获取Map对象的方法为:

ActionContext context=ActionContext.getContext(); --得到Action执行的上下文

Map request=(Map)context.get("request");--得到HttpServletRequest的Map对象 

Map session=context.getSession();--得到HttpSession的Map对象

Map application=context.getApplication();--得到ServletContext的Map对象

HttpServletRequest request = (HttpServletRequest)context.get(ServletActionContext.HTTP_REQUEST); 

HttpServletRequest request = ctx.get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);

web.xml配置

<!-- session超时定义,单位为分钟 -->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
<!-- struts2 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
<!--org.apache.struts2.dispatcher.FilterDispatcher-->
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<!-- 配置struts2的CleanUp的Filter -->
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值