首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-08-28 
struts2拦截器使用(用户session失效后的统一页面指向)?用户登录之后session我们设置一定的时间失效,失效后

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>

热点排行