权限之路径拦截

存在这样一种情况,有些人在浏览器中输入他们要访问来访问资源,这样我们就会考虑,用户是否登录,用户是否拥有权限。如果有则允许访问,如果没有就不让访问。

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步即可。它的原理类似于动态代理,以横切的形式贯穿整个程序即当我们发请求时拦截器就会起作用。

敬请关注《权限之缓存》。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值