后台接口访问后台接口_平台管理后台与商家菜单资源管理:平台管理后台的访问控制设计...

平台管理后台的访问控制设计

这里的访问控制设计使用了Spring Secutiry来实现,这些内容与第10章SSO设计中的访问控制部分的实现方法相差不多,不同之处在于这里并不需要OAuth 2,而对权限管理的设计也使用了一种更为简便的方法来实现。下面略过一些相同的地方,只针对不同点进行说明。这些设计都是在模块manage-web 中实现的。

0b351ad605a36ab02d90d263610fbcd1.png

在访问控制中使用操作员

创建一个MyUserDetails类,实现Spring Secutiry的UserDetails,从而导入Operators用户及其权限管理,代码如下所示:

public class MyUserDetails implements UserDetails {private String username;private String password;private Collection extends GrantedAuthority> authorities;private Operators operators;public MyUserDetails(String username,String password, collection extendsGrantedAuthority>authorities,Operators operators) {this.username = username;this.password = password;this.authorities =authorities;this.operators = operators;this.operators.setPassword(null);)...}

创建一个 MyUserDetailsService服务类,并在配置类SecurityConfiguration中进行引用。这样就可以让Spring Secutiry使用我们定义的用户及其权限进行安全访问控制认证了。具体的实现细节可参考前文的SSO设计。

75d7cc3612063a0b3a72725248f5e650.png

平台管理后台的权限管理设计

这里的权限管理使用了一种较为简单的方法来实现,即通过使用配置参数实现权限管理,实现方法如下。

首先,在模块的应用配置中增加如下所示的配置项:

securityconfig:logoutsuccssurl:/permitall:-/druid/*★- /bbs**deniedpage:/denyurlroles:/**/new/** =admins;/★*/edit/**=admins, editors;/**/delete/** =admins

这些配置参数由自定义的一个配置类 SecuritySettings 实现。

其中,urlroles为权限管理的配置参数。这个配置参数通过请求的URL 设定用户的访问权限。这里只设置了两个角色(或者说用户组)的权限,它们分别是admins和editors。在 URL资源配置中,结合通配符“*”,分别使用关键字new、edit 和 delete表示新建、编辑和删除操作。

在控制器的设计中,同样需要使用这些关键字设置URL,例如下面所示的一些@RequestMapping 设计:

@RequestMapping( "/new")CRequestMapping(value="/edit/{id] ")@RequestMapping(value="/update",method = RequestMethod.POST)@RequestMapping(value=" /delete/{id} ")

其次,在安全资源管理的元数据管理CustomSecurityMetadataSource中,使用如下所示的设计:

public CustomsecurityMetadataSource (String urlroles){super();this.urlroles =urlroles;resourceMap = loadResourceMatchAuthority();private Map>loadResourceMatchAuthority({Map>map = new HashMap>(0);if (urlroles !=null && !urlroles.isEmpty()){String[] resouces = urlroles.split(";");for(String resource : resouces){String[]urls = resource.split("=");String[roles = urls[1].split(",");Collection list = newArrayList();for(String role :roles){ConfigAttribute config =new SecurityConfig (role.trim());list.add (config);//key: url,value: rolesmap.put(urls[0].trim(), list);}else{logger.error("'securityconfig.urlroles' must be set");}logger.info ( "Loaded UrlRoles Resources. ");return map;}

这个设计表示,当系统启动时,导入上面权限配置的数据作为安全管理的元数据,给后面的权限检查提供依据。

最后,在权限检查CustomAccessDecisionManager的设计中,使用如下所示的设计:

public class CustomAccessDecisionManager implements AccessDecisionManager{protected Log log = LogFactory.getLog (getClass());@overridepublic void decide (Authentication authentication, 0bject object,CollectionconfigAttributes)throws AccessDeniedException,InsufficientAuthenticationException tif(configAttributes == null) {return;}//config urlrolesIteratoriterator = configAttributes.iterator();while (iterator.hasNext()){ConfigAttribute configAttribute = iterator.next();//need roleString needRole = configAttribute.getAttribute();//user rolesfor (GrantedAuthority ga : authentication.getAuthorities())Iif (needRole.equals(ga.getAuthority())) {return;}}log.info("need role is " + needRole);}throw new AccessDeniedException ( "Cannot Access!");}}

当用户访问的资源中包含安全管理的元数据时,就检查用户的角色列表中是否有与之匹配的角色,以此达到权限验证的目的。

这种简化的设计要求我们在创建角色时,其名字必须与配置中的名字相匹配,即使用前面配置中的admins和 editors。

如果想要通过数据管理的方式控制权限,实现更加丰富的权限管理功能,则可以参照10.4节中的内容。

在完成上面所有设计后,就可以开始进行测试了。

直接启动manage-web应用,启动成功之后,在浏览中输入如下所示的链接登录系统:

http://localhost:8099

使用前面单元测试时生成的用户名admin即可登录系统。登录系统后可以对操作员及其角色等数据进行管理,如图11-1所示。

bdf1ef5b0eae9b480e77251ab79581c2.png

本文给大家讲解的内容是平台管理后台与商家菜单资源管理:平台管理后台的访问控制设计

  1. 下篇文章给大家讲解的是平台管理后台与商家菜单资源管理:商家的注册管理设计;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值