比如:经常在Action中都须要获取当前登录的User,就须要获取Session。然后从Session获取当前登录的User,由于这些步骤都是反复操作,能够想办法在拦截器中进行实现。能够自己定义一个接口。仅仅要你的Action实现了这个接口。就在自己定义拦截器中进行注入。

即从拦截器中获取Session,然后设置进行注入。

简单的样例:

一个自己定义接口,仅仅要Action实现这个接口,就在拦截器中进行注入

  1. package com.atguigu.surveypark.struts2;
  2.  
  3. import com.atguigu.surveypark.model.User;
  4.  
  5. /**
  6. * 用户关注
  7. */
  8. public interface UserAware {
  9. public void setUser(User user);
  10. }

一个自己定义拦截器(登录拦截器):在拦截器中获取action的实例,假设实现上面的接口就进行注入。即调用接口的方法。

  1. package com.atguigu.surveypark.struts2.interceptor;
  2.  
  3. import com.atguigu.surveypark.model.User;
  4. import com.atguigu.surveypark.struts2.UserAware;
  5. import com.atguigu.surveypark.struts2.action.BaseAction;
  6. import com.atguigu.surveypark.struts2.action.LoginAction;
  7. import com.atguigu.surveypark.struts2.action.RegAction;
  8. import com.opensymphony.xwork2.ActionInvocation;
  9. import com.opensymphony.xwork2.interceptor.Interceptor;
  10.  
  11. /**
  12. * 登陆拦截器
  13. */
  14. public class LoginInterceptor implements Interceptor {
  15.  
  16. private static final long serialVersionUID = 4230211839075439660L;
  17.  
  18. public void destroy() {
  19. }
  20.  
  21. public void init() {
  22. }
  23.  
  24. @SuppressWarnings("rawtypes")
  25. public String intercept(ActionInvocation arg0) throws Exception {
  26. BaseAction action = (BaseAction) arg0.getAction();
  27. if(action instanceof LoginAction
  28. || action instanceof RegAction){
  29. return arg0.invoke();
  30. }
  31. else{
  32. User user = (User) arg0.getInvocationContext().getSession().get("user");
  33. if(user == null){
  34. //去登陆
  35. return "login" ;
  36. }
  37. else{
  38. //放行
  39. if(action instanceof UserAware){
  40. //注入user给action
  41. ((UserAware)action).setUser(user);
  42. }
  43. return arg0.invoke();
  44. }
  45. }
  46. }
  47. }

Action:一个实现接口的Action

  1. package com.atguigu.surveypark.struts2.action;
  2.  
  3. import java.util.List;
  4.  
  5. import javax.annotation.Resource;
  6.  
  7. import org.springframework.context.annotation.Scope;
  8. import org.springframework.stereotype.Controller;
  9.  
  10. import com.atguigu.surveypark.model.Survey;
  11. import com.atguigu.surveypark.model.User;
  12. import com.atguigu.surveypark.service.SurveyService;
  13. import com.atguigu.surveypark.struts2.UserAware;
  14.  
  15. /**
  16. * SurveyAction
  17. */
  18. @Controller
  19. @Scope("prototype")
  20. public class SurveyAction extends BaseAction<Survey> implements UserAware{
  21.  
  22. private static final long serialVersionUID = 2438909978838628762L;
  23.  
  24. //注入SurveyService
  25. @Resource
  26. private SurveyService surveyService ;
  27.  
  28. //调查集合
  29. private List<Survey> mySurveys ;
  30.  
  31. //接受user对象
  32. private User user;
  33.  
  34. public List<Survey> getMySurveys() {
  35. return mySurveys;
  36. }
  37.  
  38. public void setMySurveys(List<Survey> mySurveys) {
  39. this.mySurveys = mySurveys;
  40. }
  41.  
  42. /**
  43. * 查询我的调查列表
  44. */
  45. public String mySurveys(){
  46. this.mySurveys = surveyService.findMySurveys(user);
  47. return "mySurveyListPage" ;
  48. }
  49.  
  50. /**
  51. * 新建调查
  52. */
  53. public String newSurvey(){
  54. this.model = surveyService.newSurvey(user);
  55. return "designSurveyPage" ;
  56. }
  57.  
  58. //注入User对象
  59. public void setUser(User user) {
  60. this.user = user ;
  61. }
  62. }

struts.xml:拦截器注冊

  1. <?
  2.  
  3. xml version="1.0"?>
  4. <!DOCTYPE struts PUBLIC
  5. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  6. "http://struts.apache.org/dtds/struts-2.3.dtd">
  7. <struts>
  8. <!-- 主题 -->
  9. <constant name="struts.ui.theme" value="simple" />
  10. <!-- 开发模式 -->
  11. <constant name="struts.devMode" value="true" />
  12.  
  13. <package name="surveyparkPkg" extends="struts-default" namespace="/">
  14. <interceptors>
  15. <!-- 注冊登陆拦截器 -->
  16. <interceptor name="loginInterceptor" class="com.atguigu.surveypark.struts2.interceptor.LoginInterceptor" />
  17. <!-- 定义拦截器栈 -->
  18. <interceptor-stack name="surveyparkStack">
  19. <interceptor-ref name="loginInterceptor" />
  20. <interceptor-ref name="defaultStack" />
  21. </interceptor-stack>
  22. </interceptors>
  23.  
  24. <!-- 定义默认栈 -->
  25. <default-interceptor-ref name="surveyparkStack" />
  26.  
  27. <!-- 定义全局结果 -->
  28. <global-results>
  29. <result name="login">/index.jsp</result>
  30. </global-results>
  31.  
  32. <!-- regAction -->
  33. <action name="RegAction_*" class="regAction" method="{1}">
  34. <result name="regPage">/reg.jsp</result>
  35. <result name="input">/reg.jsp</result>
  36. <result name="success">/index.jsp</result>
  37. </action>
  38. <!-- loginAction -->
  39. <action name="LoginAction_*" class="loginAction" method="{1}">
  40. <result name="loginPage">/index.jsp</result>
  41. <result name="input">/index.jsp</result>
  42. <result name="success">/index.jsp</result>
  43. </action>
  44.  
  45. <!-- SurveyAction -->
  46. <action name="SurveyAction_*" class="surveyAction" method="{1}">
  47. <result name="mySurveyListPage">/mySurveyList.jsp</result>
  48. <result name="designSurveyPage">/designSurvey.jsp</result>
  49. </action>
  50. </package>
  51. </struts>

struts2 在拦截器进行注入(依据Action是否实现自己定义接口)的更多相关文章

  1. Struts2默认拦截器栈及内建拦截器使用具体解释

    Struts2内建拦截器介绍:   alias (别名拦截器):同意參数在跨越多个请求时使用不同别名,该拦截器可将多个Action採用不同名字链接起来,然后用于处理同一信息.  autowiring  ...

  2. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  3. struts2之拦截器

    1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...

  4. 第九篇——Struts2的拦截器

    拦截器: Struts2大多数核心功能都是通过拦截器实现的,每个拦截器完成某项功能: 拦截器方法在Action执行之前或之后执行. 工作原理: 拦截器的执行过程是一个递归的过程 action请求--& ...

  5. Struts2的拦截器是如何使用AOP工作的

    拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...

  6. Struts2 利用拦截器 interceptor 控制登陆和访问权限

    最近学习了Struts2的登录和权限控制用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultSta ...

  7. 谈谈 Struts2 的拦截器

    套话 相信非常多人都用过 Struts2 了,当然,对 Struts2 的原理也都比較了解.之前在一个项目中就已经用到了,当初的理解也不过局限在应用的层面上,对于更深层次的原理.机制,了解的并非非常多 ...

  8. java之struts2之拦截器

    1.struts2能完成数据的设置,数据的封装,数据的类型转换,数据的校验等等.struts2是如何来完成这些功能的?struts2的所有功能都是由拦截器来完成的. 2.拦截器是struts2的核心. ...

  9. 12.Struts2自定义拦截器

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

随机推荐

  1. NServiceBus入门:启程(Introduction to NServiceBus: Getting started)

    原文地址:https://docs.particular.net/tutorials/intro-to-nservicebus/1-getting-started/ 侵删. 最好的学习NService ...

  2. Linux系统/etc/sysconfig目录下没有iptables文件

    在新安装的linux系统中,防火墙默认是被禁掉的,一般也没有配置过任何防火墙的策略,所有不存在/etc/sysconfig/iptables文件. 解决办法: 1.键入以下命令,新建文件 2.复制以下 ...

  3. GUN C/C++ __attribute__ 用法 转

     http://blog.csdn.net/mydo/article/details/3738336     GNUC的一大特色(却不被初学者所知)就是__attribute__机制.__attrib ...

  4. bootstrap table 复选框选中后,翻页不影响已选中的复选框

    使用的 jquery版本为 2.1.1 在项目中发现bootstrap table的复选框选中后,翻页操作会导致上一页选中的丢失,api中的 bootstrapTable('getSelections ...

  5. python logging模块用法

    http://blog.csdn.net/zyz511919766/article/details/25136485/ import logging logging.debug('debug mess ...

  6. Windows命令行的使用

    在介绍Windows批处命令前,我们首先来介绍Windows命令行的使用. Windows shell提供了一个黑色的框框界面,即命令行操作界面,关于命令行的作用和好处,我就不费口舌了,下面仅窥见一斑 ...

  7. iOS:多线程同步加锁的简单介绍

    多线程同步加锁主要方式有3种:NSLock(普通锁).NSCondition(状态锁).synchronized同步代码块 还有少用的NSRecursiveLock(递归锁).NSConditionL ...

  8. Java自定义注解Annotation详解

    注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去 ...

  9. http://blog.csdn.net/a9529lty/article/details/6454145

    http://blog.csdn.net/a9529lty/article/details/6454145

  10. IT博客汇

    做了个博客聚合网站,收集了一堆IT牛人的博客RSS订阅,每天自动更新. 一旦关注的作者发表了新的博客,第一时间就能看到. 地址在这儿,欢迎参观: http://www.wrox.cn