第一步、定义一个拦截器:
public class UserInterceptor extends AbstractInterceptor { private static String AUTH_SESSION_USER_KEY="userInfo";//从session中获取userInfo private static String NO_LOGIN="index";//session过期跳转页面,跳转到首页 private static List<String> awayUrls = null; //放行URL static{ awayUrls = new LinkedList<String>(); awayUrls.add("/login!userLoginOrQuit.action");//登陆action } @Override public String intercept(ActionInvocation invocation) throws Exception { /* //第一种获取session的方法 Map<String, Object> session=invocation.getInvocationContext().getSession(); HttpServletRequest request= (HttpServletRequest) invocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST); if(session.get(AUTH_SESSION_USER_KEY)==null){ return NO_LOGIN; } */ //获取request域中信息 HttpServletRequest req = ServletActionContext.getRequest(); //获得当前请求url String url = req.getServletPath(); //获得请求类型 String type = req.getHeader("X-Requested-With"); System.out.println("当前请求URL:"+url+"\n请求类型:"+type);//ajax请求类型:XMLHttpRequest action请求类型:null System.out.println("userInfo:"+req.getSession().getAttribute(AUTH_SESSION_USER_KEY)+"\n"); if(!awayUrls.contains(url)){ if(req.getSession().getAttribute(AUTH_SESSION_USER_KEY)==null){ return NO_LOGIN; } } return invocation.invoke(); } }
第二步、在struts配置文件中添加监听器:
<package name="test" extends="struts-default" namespace="/"> <interceptors> <interceptor name="userInterceptor" class="com.wjl.UserInterceptor"></interceptor> <interceptor-stack name="user-inter"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="userInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="user-inter"></default-interceptor-ref> <global-results> <result name="index">/index.jsp</result> </global-results> <action name="login" class="loginAction"> ...... </action> ....... </package>
如此配置之后,就可以拦截了。
不过呢,这样子拦截,有好的也有不好的,好的就是可以指定拦截的action,不好的就是“只能拦截指定的action,其他package下的action拦截不了”。
想让其他的package也能起作用,两个方法:一、每个package的action中都加上拦截器配置:<action name=""><default-interceptor-ref name="user-inter"></default-interceptor-ref>....</action>,二、定义一个有拦截器配置的package让其他的package继承它。第一种比较麻烦也很简单这里就不说了,直接上第二种的代码:
<package name="all" extends="struts-default"> <interceptors> <interceptor name="userInterceptor" class="com.wjl.UserInterceptor"></interceptor> <interceptor-stack name="user-inter"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="userInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="user-inter"></default-interceptor-ref> <global-results> <result name="index">/index.jsp</result> </global-results> </package> <package name="test" extends="all" namespace="/"> <action name=""> ... </action> </package> <package name="user" extends="all" namespace="/"> <action name=""> ... </action> </package>先定义name为all的package,让它继承其他package都需要的struts-default,并添加上拦截器配置信息。
相关推荐
页面session页面点击会报错,我可以配置拦截器进行拦截操作判断session是否过期。
在使用spingMVC的拦截器来处理用户session失效的问题时,当用户session失效会返回一串javascript字符串强制用户浏览器跳转至登录页面。然而当使用Ajax请求数据时,在验证失败后只会响应一串字符串,JavaScript并不会...
但是我们可以在一个完全不同的类里定义一些拦截器,然后在任何控制器里使用@With注释来链接他们。 - 42 - Session和Flash作用域 - 42 - 04.模板引擎 - 43 - 模板语法 - 43 - Expressions: ${…} - 44 - Template ...
1、用户登录 验证用户是否登录成功步骤直接忽略,用户登录成功后怎么保存当前用户登录信息(session,cookie),本文介绍的是身份验证(其实就是基于cookie)的,下面看看代码。 引入命名空间 using System.Web....
15.3 使用Token Session拦截器 256 15.4 小结 257 第16章调试与性能分析 258 16.1 debug标签 258 16.2 Debugging拦截器 259 16.3 性能分析 261 16.4 小结 262 第17章进度条 263 17.1 Execute and Wait拦截器...
2、实现了用户状态拦截器,当用户登录后,将用户保存在session中,在用户进行操作时会对session中的用户进行检查,若发现用户不存在即离线,则会自动跳转到起始登录页面; 3、对用户有关操作的jsp页面也进行了...
原来一直不知道怎么在Express+Nodejs里面添加类似于Struts2的拦截器(因为要使用登录拦截的功能)。 以前一直以为在router这块添加类似一下的转移路由控制权代码的(每个都加很麻烦) app.get('/show', ...
拦截器 插件 模块 Websockets 测试 日志 部署 app.conf 命令行工具 Revel框架中用到的开源项目 Go开源项目 - goconfig源代码浅析 Go开源项目 - fsnotify源代码浅析 Go开源项目 - gorp使用方法 Revel示例 Booking ...
org.tarena.dang.interceptor :拦截器 3)struts配置文件结构 web.xml(配置Filter控制器) struts.xml (struts主配置文件) struts-user.xml(用户模块配置文件) struts-main.xml(浏览模块配置文件) ...
15.3 使用Token Session拦截器 256 15.4 小结 257 第16章 调试与性能分析 258 16.1 debug标签 258 16.2 Debugging拦截器 259 16.3 性能分析 261 16.4 小结 262 第17章 进度条 263 17.1 Execute and Wait拦截器 263...
springboot框架原理、freemark模板标签语法、jpa数据库操作及自动建表、统一上传文件实现方法、自定义注解实现统一验证方法、权限拦截器实现权限统一管理、自定义分页插件封装、调用控制台命令对数据库进行自动备份...
【资源说明】 1、基于SpringBoot和Vue的餐馆点餐系统源码+...axios设置拦截器拦截响应,如果session过期则重新登录 ### 配置 #### API `src/base/config/system.js`里的apiUrl 所有的请求是基于这个apiUrl来拼接的
拦截器 过滤器 适配器 aop 二维码生成 app包解析工具 逆向工程 rabbitmq处理请求日志 webservice发布和调用 扫码登陆 sql日志控制台打印显示出来 阿里云文件上传 阿里云短信发送 quartz动态定时任务,添加、删除任务
使用拦截器机制来限制未登录用户对购买、结算等Action的访问,保证了系统的健壮性。 对分页进行了组建化封装,提高了系统的通用性。 层与层之间采用接口连接,面向接口编程使得系统结构良好。 经验总结: 通过该...
8.8 拦截器 332 8.9 依赖注入 335 8.9.1 EJB注入 336 8.9.2 资源注入 339 8.10 配置EJB引用 340 8.11 使用计时器进行任务调度 342 8.12 本章小结 345 第9章 消息驱动EJB 346 9.1 JMS和EJB 347 9.1.1 为什么使用MDB ...
,RDLC直接打印帮助类,ResourceManager,RMB,SqlHelper,SQL语句拦截器,URL的操作类,VerifyCode,XML操作类,上传下载,二维码操作类,共用工具类,其他,分词辅助类,分页 ,加密解密,压缩解压缩,各种验证帮助类,图片,图片操作...
springboot框架原理、freemark模板标签语法、jpa数据库操作及自动建表、统一上传文件实现方法、自定义注解实现统一验证方法、权限拦截器实现权限统一管理、自定义分页插件封装、调用控制台命令对数据库进行自动备份...
25.1 AOP联盟(MethodInvocation)安全拦截器 197 25.1.1显式MethodSecurityInterceptor配置 197 25.2 AspectJ(JoinPoint)安全拦截器 198 26.基于表达式的访问控制 200 26.1概述 200 26.1.1通用内置表达式 201 ...