struts2 在拦截器进行注入(依据Action是否实现自己定义接口)
比如:经常在Action中都须要获取当前登录的User,就须要获取Session。然后从Session获取当前登录的User,由于这些步骤都是反复操作,能够想办法在拦截器中进行实现。能够自己定义一个接口。仅仅要你的Action实现了这个接口。就在自己定义拦截器中进行注入。
即从拦截器中获取Session,然后设置进行注入。
简单的样例:
一个自己定义接口,仅仅要Action实现这个接口,就在拦截器中进行注入
package com.atguigu.surveypark.struts2; import com.atguigu.surveypark.model.User; /**
* 用户关注
*/
public interface UserAware {
public void setUser(User user);
}
一个自己定义拦截器(登录拦截器):在拦截器中获取action的实例,假设实现上面的接口就进行注入。即调用接口的方法。
package com.atguigu.surveypark.struts2.interceptor; import com.atguigu.surveypark.model.User;
import com.atguigu.surveypark.struts2.UserAware;
import com.atguigu.surveypark.struts2.action.BaseAction;
import com.atguigu.surveypark.struts2.action.LoginAction;
import com.atguigu.surveypark.struts2.action.RegAction;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; /**
* 登陆拦截器
*/
public class LoginInterceptor implements Interceptor { private static final long serialVersionUID = 4230211839075439660L; public void destroy() {
} public void init() {
} @SuppressWarnings("rawtypes")
public String intercept(ActionInvocation arg0) throws Exception {
BaseAction action = (BaseAction) arg0.getAction();
if(action instanceof LoginAction
|| action instanceof RegAction){
return arg0.invoke();
}
else{
User user = (User) arg0.getInvocationContext().getSession().get("user");
if(user == null){
//去登陆
return "login" ;
}
else{
//放行
if(action instanceof UserAware){
//注入user给action
((UserAware)action).setUser(user);
}
return arg0.invoke();
}
}
}
}
Action:一个实现接口的Action
package com.atguigu.surveypark.struts2.action; import java.util.List; import javax.annotation.Resource; import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller; import com.atguigu.surveypark.model.Survey;
import com.atguigu.surveypark.model.User;
import com.atguigu.surveypark.service.SurveyService;
import com.atguigu.surveypark.struts2.UserAware; /**
* SurveyAction
*/
@Controller
@Scope("prototype")
public class SurveyAction extends BaseAction<Survey> implements UserAware{ private static final long serialVersionUID = 2438909978838628762L; //注入SurveyService
@Resource
private SurveyService surveyService ; //调查集合
private List<Survey> mySurveys ; //接受user对象
private User user; public List<Survey> getMySurveys() {
return mySurveys;
} public void setMySurveys(List<Survey> mySurveys) {
this.mySurveys = mySurveys;
} /**
* 查询我的调查列表
*/
public String mySurveys(){
this.mySurveys = surveyService.findMySurveys(user);
return "mySurveyListPage" ;
} /**
* 新建调查
*/
public String newSurvey(){
this.model = surveyService.newSurvey(user);
return "designSurveyPage" ;
} //注入User对象
public void setUser(User user) {
this.user = user ;
}
}
struts.xml:拦截器注冊
<? xml version="1.0"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 主题 -->
<constant name="struts.ui.theme" value="simple" />
<!-- 开发模式 -->
<constant name="struts.devMode" value="true" /> <package name="surveyparkPkg" extends="struts-default" namespace="/">
<interceptors>
<!-- 注冊登陆拦截器 -->
<interceptor name="loginInterceptor" class="com.atguigu.surveypark.struts2.interceptor.LoginInterceptor" />
<!-- 定义拦截器栈 -->
<interceptor-stack name="surveyparkStack">
<interceptor-ref name="loginInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors> <!-- 定义默认栈 -->
<default-interceptor-ref name="surveyparkStack" /> <!-- 定义全局结果 -->
<global-results>
<result name="login">/index.jsp</result>
</global-results> <!-- regAction -->
<action name="RegAction_*" class="regAction" method="{1}">
<result name="regPage">/reg.jsp</result>
<result name="input">/reg.jsp</result>
<result name="success">/index.jsp</result>
</action>
<!-- loginAction -->
<action name="LoginAction_*" class="loginAction" method="{1}">
<result name="loginPage">/index.jsp</result>
<result name="input">/index.jsp</result>
<result name="success">/index.jsp</result>
</action> <!-- SurveyAction -->
<action name="SurveyAction_*" class="surveyAction" method="{1}">
<result name="mySurveyListPage">/mySurveyList.jsp</result>
<result name="designSurveyPage">/designSurvey.jsp</result>
</action>
</package>
</struts>
struts2 在拦截器进行注入(依据Action是否实现自己定义接口)的更多相关文章
- Struts2默认拦截器栈及内建拦截器使用具体解释
Struts2内建拦截器介绍: alias (别名拦截器):同意參数在跨越多个请求时使用不同别名,该拦截器可将多个Action採用不同名字链接起来,然后用于处理同一信息. autowiring ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- struts2之拦截器
1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...
- 第九篇——Struts2的拦截器
拦截器: Struts2大多数核心功能都是通过拦截器实现的,每个拦截器完成某项功能: 拦截器方法在Action执行之前或之后执行. 工作原理: 拦截器的执行过程是一个递归的过程 action请求--& ...
- Struts2的拦截器是如何使用AOP工作的
拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...
- Struts2 利用拦截器 interceptor 控制登陆和访问权限
最近学习了Struts2的登录和权限控制用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultSta ...
- 谈谈 Struts2 的拦截器
套话 相信非常多人都用过 Struts2 了,当然,对 Struts2 的原理也都比較了解.之前在一个项目中就已经用到了,当初的理解也不过局限在应用的层面上,对于更深层次的原理.机制,了解的并非非常多 ...
- java之struts2之拦截器
1.struts2能完成数据的设置,数据的封装,数据的类型转换,数据的校验等等.struts2是如何来完成这些功能的?struts2的所有功能都是由拦截器来完成的. 2.拦截器是struts2的核心. ...
- 12.Struts2自定义拦截器
12.自定义拦截器 拦截器是Struts2的一个重要特性.因为Struts2的大多数核心功能都是通过拦截器实现的. 拦截器之所以称之为“拦截器”,是因为它可以拦截Action方法的执行, ...
随机推荐
- JSON Bean 相互转换工具(效率是Gson的两倍以上)
本帖最后由 xuehuayous 于 2015-12-24 08:44 编辑 前几天想封装一个自定义控件,用到Json解析,以前都使用Gson来解析Json数据的,但是想到一个简单的自定义控件就没必要 ...
- Struct2_定义拦截器并使用注解方式作用在Action的方法中
一.目的:通过在方法上加注解控制哪些方法需要登陆后才能访问 二.方式:利用拦截器判断用户是否登陆 三.实现步骤 定义配置文件struts.xml添加节点 1 2 3 4 5 6 7 8 9 1 ...
- Controller和RestController的区别
1. Controller, RestController的共同点 都是用来表示Spring某个类的是否可以接收HTTP请求 2. Controller, RestController的不同点 @C ...
- Kubernetes下的Redis主从配置架构
文章看了一大堆,但都是直接从各种地方直接拉master,slave镜像,没有交代这些镜像如何构建出来的 好把,我这篇就讲讲这些master,slave镜像如何做成. 先得找到一个标准的redis镜像, ...
- C/C++ 语言中的表达式求值
在此,首先向裘老师致敬! 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?” m = 1; n = m+++m++; 最近有位不相识的朋友 ...
- [转]SQLServer和Oracle,存储过程区别,常用函数对比
本文转自:http://www.cnblogs.com/neru/archive/2011/08/18/2144049.html 以前一直用sqlserver,只有很少的一点oracle的经验,现在要 ...
- mysql重置密码和mysql error 1044(42000)错误
#mysql错误:(密码不正确,需要重置密码) ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor ...
- jquery获取li里面的第一个a标签
$("li").children("a:eq(0)") ; children()查找子元素,eq() 查找第几个 $('.active').children(& ...
- 《大规模web服务开发技术》笔记
前段时间趁空把<大规模web服务开发技术>这本书看完了,今天用一下午时间重新翻了一遍,把其中的要点记了下来,权当复习和备忘.由于自己对数据压缩.全文检索等还算比较熟,所以笔记内容主要涉及前 ...
- Linux115条常用命令
1,echo “aa” > test.txt 和 echo “bb” >> test.txt //>将原文件清空,并且内容写入到文件中,>>将内容放到文件的尾部2, ...