Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式:
-->实现Interceptor接口
public class QLInterceptorAction implements Interceptor{
private static final long serialVersionUID = 1L;
public void destroy() {
}
public void init() {}
public String intercept(ActionInvocation arg0) throws Exception {
return null;
}
}
-->继承AbstractInterceptor类
public class QLInterceptorAction extends AbstractInterceptor{
public String intercept(ActionInvocation arg0) throws Exception {
return null;
}}
-->继承MethodFilterInterceptor类
public class QLInterceptorAction extends MethodFilterInterceptor {}
---------------------------------------------------------------------------------------------------------------------------------
登录实例:
获取username等 (判断是否有session)
1.login.jsp--------------->2.Action类(将用户登录的userName设置在Session中)----------------->3.实现拦截器------------->4.配置struts.xml(配置拦截器,看那些action需要拦截,那些不需要拦截)
执行流程:action请求--->看是执行自定义拦截器--->假如执行,到拦截器中判断.---->如果通过,继续执行,否则,返回一个结果,例如:session中username==null;则返回登录页面
--->假如不执行,到Action类,执行具体的业务请求.
具体代码如下:
1.Action类:
public String execute() throws Exception {
System.out.println("LoginAction.execute()");
if(username!=null){
//将username设置到Session中
ActionContext.getContext().getSession().put("username", username);
}
return SUCCESS;
}
2.拦截器类的具体实现:
public class QLInterceptorAction extends MethodFilterInterceptor {
private static final long serialVersionUID = 1L;
String name123;
//获取配置里设置的参数,启动服务器就会加载
//这是的方法是struts.xml配置里的param里name属性的setter方法
public void setExcluedeMethodNames(String names) {
//此处的names为userinfo,不需要拦截
/*String[] split = names.split(",");
System.out.println(Arrays.toString(split));
cludeActionNames = Arrays.asList(names.split(","));
System.out.println("------"+cludeActionNames);*/
this.name123=names;
}
protected String doIntercept(ActionInvocation ac) throws Exception {
//通过代理获取到ActionName
String actionName = ac.getProxy().getActionName();
//获取到session里的username
String username = (String) ac.getInvocationContext().getSession().get("username");
//如果actionName=userinfo,那么继续执行
if(name123.equals(actionName)){
return ac.invoke();
}
//如果username==null,那么返回到登录页面
if (username == null || "".equals(username)) {
return "notlogin";
}
return ac.invoke();
}
}
3.struts.xml配置:
<struts>
<include file="struts-default.xml"></include> <package name="interceptorencode" extends="struts-default"> <!-- 设置拦截器 -->
<interceptors>
<interceptor name="userinfos" class="com.struts.interceptoraction.QLInterceptorAction">
<!-- 通过配置的形式向拦截器中传递参数 -->
<param name="excluedeMethodNames">userinfo</param> </interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="userinfos"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 默认执行拦截器 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<!-- 全局视图结果 -->
<global-results>
<result name="notlogin">/login.jsp</result>
</global-results>
<action name="userinfo" class="com.struts.interceptoraction.LoginAction" >
<result>/JSP/NewFile.jsp</result>
</action> </package>
</struts>
Struts2自定义拦截器Interceptor以及拦截器登录实例的更多相关文章
- struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...
- 12.Struts2自定义拦截器
12.自定义拦截器 拦截器是Struts2的一个重要特性.因为Struts2的大多数核心功能都是通过拦截器实现的. 拦截器之所以称之为“拦截器”,是因为它可以拦截Action方法的执行, ...
- 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...
- Struts2自定义拦截器
1. 需求 自定义拦截器实现,用户登录的访问控制. 2. 定义拦截器类 public class LoginInterceptor extends AbstractInterceptor { @Ove ...
- struts2拦截器interceptor的三种配置方法
1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...
- 5、Struts2自定义拦截器
一.拦截器相关知识 1.Struts2框架剖析 Holly版本生活案例: 影视公司(拍电影) ActionMapper 传媒公司(包装明星) ActionMapping 明星 ...
- Struts2第七篇【介绍拦截器、自定义拦截器、执行流程、应用】
什么是拦截器 拦截器Interceptor-..拦截器是Struts的概念,它与过滤器是类似的-可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Struts为 ...
- Struts2自定义拦截器处理全局异常
今天在整理之前的项目的时候想着有的action层没有做异常处理,于是想着自定义拦截器处理一下未拦截的异常. 代码: package cn.xm.exam.action.safeHat; import ...
- Struts2学习:interceptor(拦截器)的使用
对于需要登陆验证.权限验证等功能的网站,每一次请求,每一个action都写一段验证的代码,未免显得冗余且不易维护.struts2提供了拦截器interceptor,为这些页面提供一个切面,或者说公共组 ...
随机推荐
- Servlet进阶API
对于每个Servlet的设置信息,web容器会为其生成一个ServletConfig作为代表对象,可以从该对象取得Servlet初始参数,以及代表整个web应用程序的ServletContext对象. ...
- iOS oc和swift中协议的使用
创建一个空的工程 在工程中我们新建一个类 继承与NSObject 定义一个协议‘ @protocol UpdateAlertDelegate <NSObject> //这里的红色字体就是我 ...
- 迈向新纪元编辑器Atom
第一次听说Atom是半年前天猫的学姐说她在用这款这款编辑器,期间我从dw到st再到webstorm都分别做了项目~,但是作为一名拥抱开源的FE,怎么能拒绝github社区维护的项目呢?接着就让我们感受 ...
- 【Scala】Scala之Control Structures
一.前言 前面学习了Scala的Numbers,接着学习Scala的Control Structures(控制结构). 二.Control Structures Scala中的控制结构与Java中的颇 ...
- js中的innerHTML和outerHTML区别
一.区别:1)innerHTML: 从对象的起始位置到终止位置的全部内容,不包括Html标签.2)outerHTML: 除了包含innerHTML的全部内容外, 还包含对象标签本身. 二.例子: &l ...
- 简单的Elf逆向Writeup
ElfCrackMe1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acrony ...
- 1activiti认识和数据库和插件配置
工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是"使在多个参与者之间按照某种预定义的规则自动进行传递文档.信息或任务的过程, 从而实现某个预期的 ...
- CentOS7 设置局域网固定IP
题记: 在局域网内PC通常都是采用自动获取IP的方式从路由器拿到局域网IP的,每次PC启动后分配到的局域网IP都不一定相同.但是出于某些特殊的需求,例如要在局域网内做端口映射,需要将PC设置成使用固定 ...
- 深入子元素的width与父元素的width关系
深入理解父元素与子元素的width关系 对于这一部分内容,如果理解准确,可以更容易控制布局,节省不必要的代码,这里将简单研究. 第一部分:父子元素都是内联元素 代码演示如下: <!DOCTYPE ...
- 安装软件(基于redhat、centos发行版)
yum 命令的使用: yum local install package_name.rpm 安装本地rpm包yum list updates 列出所有可以更新的安装包yum update packag ...