Jimmy小站
小明也有大梦想 — 蒋明/铭struts2 的拦截器 (interceptor)
2016-05-08 / 未分类 / 3427 次围观 / 0 次吐槽首先是在struts.xml中配置好拦截器(interceptors->interceptor),然后将一组完成组合任务的拦截器配置成拦截器栈(interceptor-stack)。
最后在需要这个拦截器栈的Action中加入 interceptor-ref。同时我们还能设置全局默认的拦截器(default-interceptor-ref),在设置了全局默认拦截器之后,若是某些特殊的Action不需要任何拦截器,可在该Action下定义一个(<interceptor-ref name="defaultStack"/>),在Action中定义了拦截器将会覆盖全局默认拦截器。而该拦截器是最基础的拦截器,不做任何处理。最终相关配置如下。
<?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.3.dtd"> <struts> <package name="struts-global" extends="struts-default"> <interceptors> <!-- 自定义一个拦截器,检查session中是否有登录信息 --> <interceptor name="authorLogin" class="authorLogin"/> <!-- 加入必须的default拦截器组 组成完整自定义拦截器(如果不这样,会无法获取参数) --> <interceptor-stack name="loginInterceptorStack"> <interceptor-ref name="defaultStack"/> <interceptor-ref name="authorLogin"/> </interceptor-stack> </interceptors> <!-- 默认全部都需要经过的拦截器,用于验证用户是否登录,尚未登录的不能访问相关信息 --> <default-interceptor-ref name="loginInterceptorStack"/> <!-- 全局 result, 要是在自己的action中找不到result时,会在这个全局result中寻找 --> <global-results> <result name="errHandler" type="redirect">/error.jsp</result> <result name="noSession" type="redirect">/loginPage.jsp</result> </global-results> <!-- 关联异常类,如发生异常则返回一个 errHandler字串,然后寻找全局result获得error.jsp页面返回 --> <global-exception-mappings> <exception-mapping result="errHandler" exception="java.lang.Exception" /> </global-exception-mappings> </package> <package name="default" namespace="/" extends="struts-default,struts-global"> <!-- 登录相关Action --> <action name="login_*" class="login" method="{1}"> <result name="success">/index.jsp</result> <result name="error">/loginPage.jsp</result> <result name="loginPage">/loginPage.jsp</result> <!-- 加入defalutStack后,覆盖全局默认拦截器, 即不需要session也能执行,因为登录操作完成之前肯定是没有session的 --> <interceptor-ref name="defaultStack"/> </action> <!-- 文件上传相关Action --> <action name="upload_*" class="upload" method="{1}"> <result name="page">/uploadPage.jsp</result> <result name="success">/uploadPage.jsp</result> </action> </package> </struts>
该项目使用了Spring,所以所有类都交由Spring管理了,下面贴出applicationContext.xml与相关类的实现
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" xmlns:tx="http://www.springframework.org/schema/tx"> <bean id="login" class="net.share.action.LoginAction" /> <bean id="upload" class="net.share.action.UploadAction" /> <bean id="authorLogin" class="net.share.action.AuthorizationInterceptor" /> </beans>
LoginAction.java
package net.share.action; import net.share.model.ComUser; import net.share.service.UserService; import net.share.service.UserServiceImpl; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class LoginAction extends ActionSupport implements ModelDriven<ComUser> { /** * */ private static final long serialVersionUID = 1L; ComUser user = new ComUser(); String loginInfo; @Override public ComUser getModel() { return user; } public String getLoginInfo() { return loginInfo; } public void setLoginInfo(String loginInfo) { this.loginInfo = loginInfo; } @Override public String execute() throws Exception { System.out.println("LoginAction-execute..."); return "loginPage"; } public String loginPage(){ System.out.println("LoginAction-loginPage..."); return "loginPage"; } public String doLogin() throws Exception{ System.out.println("LoginAction-doLogin..."); System.out.println(user.getUserName()+"==="+user.getPassword()); UserService uService = new UserServiceImpl(); ComUser user2 = uService.getUserByName(user.getUserName()); //System.out.println(user2.getPassword()); if (user2 != null && user.getPassword().equals(user2.getPassword())) { //System.out.println("success"); ActionContext.getContext().getSession().put("user", user); loginInfo = SUCCESS; return SUCCESS; } else if (user2 == null) { loginInfo = "用户不存在!"; } else { loginInfo = "用户密码错误!"; } System.out.println("error"); loginInfo = ERROR; return ERROR; } }
AuthorizationInterceptor.java
package net.share.action; import net.share.model.ComUser; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class AuthorizationInterceptor implements Interceptor{ private static final long serialVersionUID = 1L; @Override public void destroy() { System.out.println("AuthorizationInterceptor destroy..."); } @Override public void init() { System.out.println("AuthorizationInterceptor init..."); } @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("AuthorizationInterceptor intercept..."); ComUser user = (ComUser) ActionContext.getContext().getSession().get("user"); if (user != null) { return invocation.invoke(); } return "error"; } }
推荐您阅读更多有关于“struts2,interceptor,”的文章
本月热文
Copyright © Jimmy小站 Allrights Reserved.备案号:桂ICP备 15005996
额 本文暂时没人评论 来添加一个吧
发表评论