public class MyInvocationSecurityMetadataSourceService implements FilterInvocationSecurityMetadataSource {
@Autowired
private IResourceDao resourceDao;
//<资源,权限列表>存储所有资源与权限
private static Map<String, Collection<ConfigAttribute>> resourceMap = null;
public MyInvocationSecurityMetadataSourceService() {
resourceMap = new HashMap<>();
loadResourcePermission();
* 加载资源权限
private void loadResourcePermission() {
List<Resource> resources = resourceDao.getAll();//此处会报空指针异常
@Override
public Collection<ConfigAttribute> getAllConfigAttributes() {
// TODO Auto-generated method stub
return null;
@Override
public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
return null;
@Override
public boolean supports(Class<?> arg0) {
// TODO Auto-generated method stub
return true;
Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java SE程序 自定义异常类Java
1.Collection getAttributes(Object object) throws IllegalArgumentException;
获取某个受保护的安全对象object的所需要的权限信息,是一组ConfigAttribute对象的集合,如果该安全对象object不被当前SecurityMetadataSource对象支持,则抛出异常IllegalArgumentException...
这样,当用户发起请求时,Spring Security 将从 securityMetadataSource 中获取该请求所需的访问控制元数据,并根据这些元数据进行访问控制。总结来说,FilterInvocationSecurityMetadataSource 接口用于获取指定请求所需的访问控制元数据,实现类负责根据请求 URL,从数据库或其他外部数据源中获取相应的访问控制元数据,并将其放置到 Spring Security 的全局缓存中供后续使用。
在Spring Security中实现通过数据库动态配置url资源权限,需要通过配置验证过滤器来实现资源权限的加载、验证。系统启动时,到数据库加载系统资源权限列表,当有请求访问时,通过对比系统资源权限列表和用户资源权限列表(在用户登录时添加到用户信息中)来判断用户是否有该url的访问权限。
在配置验证过滤器时需要的配置项有如下几个:
filterSecurityInterceptor:通过继承AbstractSecurityInterceptor并实现Filter接口自定义一个验证过滤...
一般情况下,我们如果需要自定义权限拦截,则需要涉及到FilterInvocationSecurityMetadataSource这个接口了。
这里有个坑爹的地方。如果用户未登录,但是已经设置了拦截白名单的URL,仍然会进入到权限验证里面来。起初,我以为不会进来,但后来跟踪源代码发现,还是会进来。只是此时的身份是一个匿名用户。其默认的实现为DefaultFilterInvocationSecuri...
@Component
public class CustomFilterInvocationSecurityMetadataSource
implements FilterInvocationSecurityMetadataSource {
private fi
5.security filter
@Service
public class MyFilterSecurityInterceptor extends AbstractSecurityInterceptor implements Filter {
private static final Logger LOG = LoggerFactory.getLogger(MyFilterSecurityInterceptor.class);
@Autowired
private Filte
本文将具体介绍在Spring Boot中如何使用Spring Security进行安全控制,权限控制数据均有数据库查询。1.背景Spring Security 主要是在访问前添加过滤器,过滤器中主要起作用的为 访问鉴权authenticationManager(有没有权限访问系统) 和访问决策器accessDecisionManager(可以访问系统的哪些资源,当时...
关于每次请求都要执行两个,即经过重写FilterInvocationSecurityMetadataSource的getAttributes()方法
执行两次的方法
@Override
public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
//获取请求地址
String requestUrl = ((FilterI
FilterInvocationSecurityMetadataSource权限配置数据库加载
AbstractSecurityInterceptor Spring security 核心抽象接口
AuthenticationManager 自定义...
使用HttpSecurity配置认证授权并不是很灵活,无法实现资源和角色之间的动态调整,要实现动态配置URL权限,开发者需要自定义权限配置。(结合总结三实现)
1.数据库设计
在总结三的基础上新增一张资源表和一张角色关联表,如下图所示,资源表中定义了用户能够访问的URL模式,资源角色表定义了访问该模式的URL需要什么样的角色。
2.自定义 FilterInvocationSecurityMetadataSource
要实现动态配置权限,首先自定义一个类实现FilterInvocationS
简单来说分为两步: 第一步,用户先从前端发起一个http请求,拿到http请求地址之后,我先去分析地址和数据库中的menu表中的哪一个url是相匹配的。就先看一下用户的请求地址跟这里边的哪一个是吻合的。
第一步的核心目的是根据用户的请求地址分析出来它所需要的角色,就是当前的请求需要哪些角色才能访问
第二步是去判断当前用户是否具备它需要的角色
2、UrlFilterInvocationSecurit