自定义的认证过程中,对系统未定义的资源路径,认证过程是拿不到此资源所需权限标示的。
1.可以采用再action中注解:(系统已经配置了统一的认证过程,没必要再加注解)
@PreAuthorize("hasRole('ROLE_SUPER')")
2.自定义认证过程对未定义资源做特殊处理
系统未定义资源流程测试:
url没有添加到系统资源权限管理中当访问到来时,
resource.secImpl.MySecurityMetadataSource.getAttributes() 判断认证权限为空,
没有判断依据,直接放行,然后经springMVC解析,进入controller中
测试结论:
倘若系统某个操作对应资源权限没有加入到资源权限表中,访问此路径是可以通过自定义认证的;
只有加入到权限资源中的路径,有了对应权限的判断依据,才可以进行判断并阻止访问。
处理 a.对于一些不重要的请求(只获取数据,如下拉),可以默认放行
<!-- 一些没必要加入权限资源的接口,给予放行-->
<http pattern="/*/letGo/*" security="none"/>
b.处于拦截范围且不在权限资源中的路径考虑不给予通行
可以在判断url对应的权限configAttributes == null时
return它之前就标记为未定义资源,并从resourceMap获取一个定义好的未加入url的权限,
此权限每个用户都不具有,
然后进入decide()方法,此先判断是不是未定义资源并做处理
// 数据库手动加上一个资源权限内容,resUrl为‘undefine’
//url匹配过程修改:
if(configAttributes == null){
configAttributes = resourceMap.get("undefine");
}
后续判断中就会判断为不具有此权限而抛出无权限异常。阻止访问!