责任链模式进行登录权限拦截
2018-06-18 02:24:13来源:未知 阅读 ()
1、创建PermissionHandlerChain 抽象类
package com.shsxt.crm.core.framework.annotation.factory;
import com.shsxt.crm.core.framework.annotation.CheckType;
import javax.servlet.http.HttpServletRequest;
/**
* 责任链模式
* 权限校验处理链
*/
public abstract class PermissionHandlerChain {
//本身的对象引用
protected PermissionHandlerChain successor;
//权限校验方法
public abstract boolean permissionCherkHandler(HttpServletRequest request, CheckType type,String[] optValue );
//设置处理对象的方法
protected void setSuccessor(PermissionHandlerChain successor){
this.successor=successor;
}
}
《2-4是整个链状的3种状态自拦截》
2、不需要拦截的状态(NONE)
package com.shsxt.crm.core.framework.annotation.factory;
import com.shsxt.crm.core.framework.annotation.CheckType;
import javax.servlet.http.HttpServletRequest;
/**
* 责任链模式
* 权限校验处理链
*/
public abstract class PermissionHandlerChain {
//本身的对象引用
protected PermissionHandlerChain successor;
//权限校验方法
public abstract boolean permissionCherkHandler(HttpServletRequest request, CheckType type,String[] optValue );
//设置处理对象的方法
protected void setSuccessor(PermissionHandlerChain successor){
this.successor=successor;
}
}
3、对是否登录进行拦截(LOGIN)
package com.shsxt.crm.core.framework.annotation.factory;
import com.shsxt.crm.core.common.util.VerificationLoginUtil;
import com.shsxt.crm.core.framework.annotation.CheckType;
import com.shsxt.crm.core.framework.annotation.handler.PermissionHandlerBeanFactory;
import javax.servlet.http.HttpServletRequest;
public class PermissionLoginHandler extends PermissionHandlerChain {
@Override
public boolean permissionCherkHandler(HttpServletRequest request, CheckType type, String[] optValue) {
if (type == CheckType.LOGIN) {
return VerificationLoginUtil.isUserLogin(request);
}else {
setSuccessor(PermissionHandlerBeanFactory.createPermissionLoginHandler());
return successor.permissionCherkHandler(request,type,optValue);
}
}
}
4、对每个用户的操作权限进行拦截(ROLE)
package com.shsxt.crm.core.framework.annotation.factory;
import com.shsxt.crm.core.framework.annotation.CheckType;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* 角色校验
*/
public class PermissionRoleHandler extends PermissionHandlerChain {
@Override
public boolean permissionCherkHandler(HttpServletRequest request, CheckType type, String[] optValue) {
if (type == CheckType.ROLE){
//获取用户权限值
Object userPermission = request.getSession().getAttribute("userPermission");
//验证用户权限值(Acl)是否包含操作模块的操作权限值(optAcl)
List<String> aclList = (List<String>) userPermission;
for (String oacl:optValue) {
boolean c = aclList.contains(oacl);
if (!c){
return false;
}
}
return true;
}else {
return false;
}
}
}
5、在处理拦截的流转过程中要不断的new下一个类的对象,所以将每个相同的部分提取出来,用一个简单的工厂模式进行代替(PermissionHandlerBeanFactory)。
package com.shsxt.crm.core.framework.annotation.factory;
import com.shsxt.crm.core.framework.annotation.handler.PermissionHandlerChain;
import com.shsxt.crm.core.framework.annotation.handler.PermissionLoginHandler;
import com.shsxt.crm.core.framework.annotation.handler.PermissionNoneHandler;
import com.shsxt.crm.core.framework.annotation.handler.PermissionRoleHandler;
/**
* 简单工厂模式
*/
public class PermissionHandlerBeanFactory {
public static PermissionHandlerChain createPermissionNoneHandler (){
return new PermissionNoneHandler();
}
public static PermissionHandlerChain createPermissionLoginHandler (){
return new PermissionLoginHandler();
}
public static PermissionHandlerChain createPermissionRoleHandler (){
return new PermissionRoleHandler();
}
}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
- 你与面试官所了解的单例模式并不一样! 2020-06-06
- 高手眼中的观察者模式有什么不一样 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash