权限之路径拦截
2015-12-01 12:16
309 查看
存在这样一种情况,有些人在浏览器中输入他们要访问来访问资源,这样我们就会考虑,用户是否登录,用户是否拥有权限。如果有则允许访问,如果没有就不让访问。
1.定义拦截器
User:根据用户的访问路径去校验是否有权限
2.在struts.xml配置拦截器
3.总结
拦截器的使用很简单,只需如上2步即可。它的原理类似于动态代理,以横切的形式贯穿整个程序即当我们发请求时拦截器就会起作用。
敬请关注《权限之缓存》。
1.定义拦截器
//权限拦截器 publicclass CheckPrivilegeInterceptor extends AbstractInterceptor { @Override publicString intercept(ActionInvocation invocation) throws Exception { // System.out.println("----->之前"); // Stringresult=invocation.invoke();//代理的action // System.out.println("----->之后"); // returnresult; Useruser=(User) ActionContext.getContext().getSession().get("user"); StringnameSpace=invocation.getProxy().getNamespace(); StringactionName=invocation.getProxy().getActionName(); StringprivUrl=nameSpace+actionName; if(user==null){//如果是登录页面是不拦截的 if(privUrl.startsWith("/user_login")){ returninvocation.invoke(); }else{ return"loginUI"; } }else{ //检测是否有访问该资源的权限 if(user.hasPrivilegeByUrl(privUrl)){ //放行 returninvocation.invoke(); }else{ return"noPrivilegeError"; } } } }
User:根据用户的访问路径去校验是否有权限
/** * 根据路径用户查询权限 */ publicboolean hasPrivilegeByUrl(String privUrl) { //超级管理有所有的权限 if(isAdmin()) { returntrue; } //>> 去掉后面的参数 intpos = privUrl.indexOf("?"); if(pos > -1) { privUrl= privUrl.substring(0, pos); } //>> 去掉UI后缀 if(privUrl.endsWith("UI")) { privUrl= privUrl.substring(0, privUrl.length() - 2); } //如果本URL不需要控制,则登录用户就可以使用 Collection<String>allPrivilegeUrls = (Collection<String>)ActionContext.getContext().getApplication().get("allPrivilegeUrls"); if(!allPrivilegeUrls.contains(privUrl)) { returntrue; }else { //普通用户要判断是否含有这个权限 for(Role role : roles) { for(Privilege priv : role.getPrivileges()) { if(privUrl.equals(priv.getUrl())) { returntrue; } } } returnfalse; } }
2.在struts.xml配置拦截器
<!--权限拦截器 --> <interceptors> <interceptorname="checkPrivilege" class="cn.itcast.oa.util.CheckPrivilegeInterceptor"></interceptor> <interceptor-stackname="defaultStack"> <interceptor-refname="checkPrivilege" /> <interceptor-refname="defaultStack" /> </interceptor-stack> </interceptors>
3.总结
拦截器的使用很简单,只需如上2步即可。它的原理类似于动态代理,以横切的形式贯穿整个程序即当我们发请求时拦截器就会起作用。
敬请关注《权限之缓存》。
相关文章推荐
- hough变换是如何检测出直线和圆的?
- FastReport经验
- Oracle修改表结构字段名和字段长度
- Oracle单组函数
- PHP接收json 并将接收数据插入数据库的实现代码
- linux下软链接和硬链接的区别 【转】
- 可扩展机器学习——概述
- leetcode ugly number 2
- android 获得屏幕状态
- 单位和尺寸
- linux下VI模式中上下左右键和回退键出现字母
- hdu3949
- 【非技术】谈谈简历那些事儿
- AppleWatch___学习笔记(三)iPhone和Apple Watch上的数据同步
- linux开机到登陆的启动过程描述 【转】
- android-Storage Access Framework
- poj 3185
- java servlet proxy
- 提示fxp不是一个目标文件
- 单链表(线性链表)操作