原因:

自定义的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。如果不是,则返回默认的角色层次结构进行权限检查

自定义的FilterSecurityInterceptor为什么会拦截permitAll的url如何识别url是permitAll的

原文地址: https://www.cveoy.top/t/topic/c05z 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录