自定义的FilterSecurityInterceptor为什么会拦截permitAll的url如何识别url是permitAll的
原因:
自定义的FilterSecurityInterceptor会拦截所有请求,包括permitAll的url。这是因为在Spring Security中,对于所有请求都会经过FilterSecurityInterceptor的过滤器链进行权限检查,即使是permitAll的url也不例外。但是,permitAll的url并不会进行实际的权限检查,而是直接放行,因此不会影响到这些url的访问。
如何识别url是permitAll的:
在Spring Security的配置中,可以通过以下方式配置permitAll的url:
http.authorizeRequests().antMatchers("/public/**").permitAll()
其中"/public/**"表示匹配以"/public/"开头的所有url,并且permitAll()表示对于这些url不进行权限检查,直接放行。
可以通过自定义的SecurityExpressionHandler来识别url是否是permitAll的。例如,可以在SecurityExpressionHandler中重写getRoleHierarchy()方法,判断当前请求的url是否是permitAll的url,如果是,则返回空的角色层次结构,表示当前用户拥有任何角色都可以访问该url。如果不是,则返回默认的角色层次结构进行权限检查
原文地址: https://www.cveoy.top/t/topic/c05z 著作权归作者所有。请勿转载和采集!