struts2注解下的拦截器配置
2011-08-25 15:02
232 查看
貌似这个这问题已经纠结了半年了,网上找资料也不是很多。上周六调试通了。借CSDN mark一下吧。
一 、实现
1、 首先上拦截器部分的代码
2、然后就是struts.xml的内容
3、LoginAction的代码(只上关键部分,下面也一样)
可以看到 此action继承了custom-default中定义的login以及CheckLoginInterceptor这个拦截器
4、最后是仿业务逻辑的 代码
此action的Action information的跟LoginAction一样,就不说了
http://localhost:8080/intt/login?param=1 模仿登录(1),完成后浏览http://localhost:8080/intt/sign 则显示 “already login!” (2)
(1)console 显示 “begin check login interceptor exit check login, because this is login action.”
(2)console 显示"begin check login interceptor username-----------123 123 already login!"
2 模仿未登录
http://localhost:8080/intt/login?param=2 模仿登录(1)。 完成后浏览http://localhost:8080/intt/sign 则显示 “please login” (2)
(1)console 显示 “begin check login interceptor exit check login, because this is login action.”
(2)console 显示"begin check login interceptor username-----------null no login, forward login page! Forwarding to location /login.jsp"
如果你在新增的package定义LoginAction 的跳转映射。对不起哦,这样做是不行滴。但是如果你把注解的两个包( struts2-config-browser-plugin-2.2.1.jar, struts2-convention-plugin-2.2.1.jar)拿掉就行了。但这样一做,就不是注解了撒。
1) commons-fileupload-1.2.2.jar
2) commons-io-1.3.2.jar
3) commons-lang-2.3.jar
4) commons-logging-1.1.1.jar
5) freemarker-2.3.16.jar
6) javassist-3.11.0.GA.jar
7) log4j-1.2.16.jar
8) ognl-3.0.1.jar
9) struts2-config-browser-plugin-2.2.1.jar
10) struts2-convention-plugin-2.2.1.jar
11) struts2-core-2.2.1.jar
12) xwork-core-2.2.1.jar
一 、实现
1、 首先上拦截器部分的代码public class CheckLoginInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 1L; public static final String USER_SESSION_KEY = "user"; private Logger LOG = Logger.getLogger(CheckLoginInterceptor.class); @Override public String intercept(ActionInvocation actionInvocation) throws Exception { LOG.info("begin check login interceptor"); // 对LoginAction不做该项拦截 Object action = actionInvocation.getAction(); if (action instanceof LoginAction) { LOG.info("exit check login, because this is login action."); return actionInvocation.invoke(); } // 验证 session Map<String, Object> session = ActionContext.getContext().getSession(); String username = (String) session.get(USER_SESSION_KEY); LOG.info("username-----------" + username); if (username != null) { // 存在的情况下进行后续操作。 LOG.info(username + " already login!"); return actionInvocation.invoke(); } else { // 否则终止后续操作,返回LOGIN LOG.info("no login, forward login page!"); return Action.LOGIN; } } }
2、然后就是struts.xml的内容
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="custom-default" extends="struts-default"> <!-- 继承默认的 struts2 配置文件 --> <interceptors> <interceptor name="checkLogin" class="com.cmcc.intt.util.CheckLoginInterceptor" /> <interceptor-stack name="checkLoginStack"> <interceptor-ref name="checkLogin"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 设置全局 全局默认的拦截器栈--> <default-interceptor-ref name="checkLoginStack"></default-interceptor-ref> <!-- 定义全局Result --> <global-results> <!-- 当返回login视图名时,转入/login.jsp页面 --> <result name="login">/login.jsp</result> </global-results> </package> </struts>
3、LoginAction的代码(只上关键部分,下面也一样)
@ParentPackage("custom-default") @InterceptorRefs(@InterceptorRef("checkLoginStack")) @Results( { @Result(name = SUCCESS, location = "/redirect.jsp"), @Result(name = "input", location = "/login.jsp") }) public class LoginAction extends ActionSupport { public String param = null; private static final long serialVersionUID = -7146549074248299166L; private Logger LOG = Logger.getLogger(LoginAction.class); public String execute() { LOG.info(param); Map<String, Object> session = ActionContext.getContext().getSession(); if (param.equals("1")) { session.put("user", "123"); return SUCCESS; } else { session.remove("user"); return "input"; } } (public getter and setter ………………) }附 通过http://localhost:8080/intt/config-browser/index.action 看此action的Action information如下:
Results |
---|
Name | Type | Parameters |
---|---|---|
input | org.apache.struts2.dispatcher.ServletDispatcherResult | location = /login.jsp |
success | org.apache.struts2.dispatcher.ServletDispatcherResult | location = /redirect.jsp |
login | org.apache.struts2.dispatcher.ServletDispatcherResult | location = /login.jsp |
Interceptors |
---|
Name | Type |
---|---|
CheckLoginInterceptor | com.cmcc.intt.util.CheckLoginInterceptor |
……(18个defaultstack的拦截器的第一个) | …………………… |
……(18个defaultstack的拦截器的第二个) | ………… |
……(18个defaultstack的拦截器的第三个) | ………… |
4、最后是仿业务逻辑的 代码
@ParentPackage("custom-default") @InterceptorRefs(@InterceptorRef("checkLoginStack")) @Results( { @Result(name = SUCCESS, location = "/redirect.jsp"), @Result(name = "input", location = "/login.jsp") }) public class SignAction extends ActionSupport { private static final long serialVersionUID = -1326137892057921638L; public String execute() { System.out.println("SignAction.execute"); return SUCCESS; } }
此action的Action information的跟LoginAction一样,就不说了
二 执行过程
1 模仿已登录http://localhost:8080/intt/login?param=1 模仿登录(1),完成后浏览http://localhost:8080/intt/sign 则显示 “already login!” (2)
(1)console 显示 “begin check login interceptor exit check login, because this is login action.”
(2)console 显示"begin check login interceptor username-----------123 123 already login!"
2 模仿未登录
http://localhost:8080/intt/login?param=2 模仿登录(1)。 完成后浏览http://localhost:8080/intt/sign 则显示 “please login” (2)
(1)console 显示 “begin check login interceptor exit check login, because this is login action.”
(2)console 显示"begin check login interceptor username-----------null no login, forward login page! Forwarding to location /login.jsp"
三 总结
在util包中写入类似CheckLoginInterceptor 这样的拦截器代码。然后在struts.xml中新增一个package 建立拦截器栈。建好后在action的parentpackage中继承此package并且拦截器要填入刚才新建的拦截器栈。如果你在新增的package定义LoginAction 的跳转映射。对不起哦,这样做是不行滴。但是如果你把注解的两个包( struts2-config-browser-plugin-2.2.1.jar, struts2-convention-plugin-2.2.1.jar)拿掉就行了。但这样一做,就不是注解了撒。
四 运行环境
下面我把我的运行环境的 jar包贴出来吧1) commons-fileupload-1.2.2.jar
2) commons-io-1.3.2.jar
3) commons-lang-2.3.jar
4) commons-logging-1.1.1.jar
5) freemarker-2.3.16.jar
6) javassist-3.11.0.GA.jar
7) log4j-1.2.16.jar
8) ognl-3.0.1.jar
9) struts2-config-browser-plugin-2.2.1.jar
10) struts2-convention-plugin-2.2.1.jar
11) struts2-core-2.2.1.jar
12) xwork-core-2.2.1.jar
相关文章推荐
- 个人总结的Struts2拦截器使用和拦截栈的配置,基于注解的方式
- Struts2使用20 -- 注解配置2 -- 生命周期回调注解(拦截器注解)
- struts2 注解配置拦截器 实例
- struts2基于注解且使用拦截器的文件上传配置
- struts2 注解配置拦截器 实例
- struts2注解下的拦截器配置
- Struts2使用20 -- 注解配置2 -- 生命周期回调注解(拦截器注解)
- struts2自定义拦截器注解配置方法
- struts2基于注解的拦截器配置
- 利用注解配置拦截器
- Struts2使用之Action注解的配置
- 配置struts2的拦截器
- Struts2 学习笔记——struts.xml文件之拦截器的配置
- Struts2 拦截器详细配置过程
- Struts2拦截器配置实例
- struts2基于注解配置action
- Struts2全局拦截器的配置
- Struts2拦截器Interceptor的原理与配置实例详解
- Struts2 拦截器(Interceptor )原理和配置
- Struts2默认拦截器配置