河源公司做网站,建站公司一般怎么获客,网站建设策划书前言,诚聘网站开发在SpringSecurity中,往往需要对部分接口白名单访问,而大部分在使用Security中就有一个误区,那就是免鉴权访问和白名单的区别。 大部分的Security文章包括官方文档给出免鉴权访问都是使用.permitAll()去对相应路径进行免鉴权访问,但实际上这仅仅只表示该资源不需要相应的权限访问…在SpringSecurity中,往往需要对部分接口白名单访问,而大部分在使用Security中就有一个误区,那就是免鉴权访问和白名单的区别。 大部分的Security文章包括官方文档给出免鉴权访问都是使用.permitAll()去对相应路径进行免鉴权访问,但实际上这仅仅只表示该资源不需要相应的权限访问但是用户还需要认证.也就是Security的认证/授权两个概念. Security白名单策略
将需要放行的白名单使用.ignoring注册. Beanpublic WebSecurityCustomizer ignoringCustomizer() {return web - web.ignoring().requestMatchers(whiteUrlArr);} 当Spring启动后会将其中每个url注册为一个MvcRequestMatcher并且放入到WebSecurity中的ignoredRequests管理。 然后在构建WebSecurity时去创建对应的DefaultSecurityFilterChain. 然后这些会被放入到Security的过滤链中交给WebSecurity进行管理,当有请求进入后就会进入到过滤链时WebSecurity会去循环调用chian以获取处理请求路径对应的过滤器组成过滤链如果未注册ignor则会使用默认的AnyRequest,这将返回全部的Security过滤器. private ListFilter getFilters(HttpServletRequest request) {int count 0;Iterator var3 this.filterChains.iterator();SecurityFilterChain chain;do {if (!var3.hasNext()) {return null;}chain (SecurityFilterChain)var3.next();if (logger.isTraceEnabled()) {count;logger.trace(LogMessage.format(Trying to match request against %s (%d/%d), chain, count, this.filterChains.size()));}} while(!chain.matches(request));return chain.getFilters();} 而DefaultSecurityChain则会使用其对应的match对请求路径进行匹配,如果匹配上则返回相应的过滤器. 匹配成功返回RequestMatchResult: 通过返回的对象是否为空进行判断是否匹配成功: 匹配成功后会返回其对应的Filter,因为是通过igonr去进行忽略的所以filter为空,所以就会忽略对对应路径请求的鉴权等操作. 这就是SpringSecurity真正的白名单而不仅仅是对相应路径进行免权访问.
后续会尝试去探索免权访问...