spring oauth2 在获取token过程中 在header中没有authorization 怎么处理
步骤1:自定义过滤器fillAuthorizationBasicAuthenticationFilter

看spring的HttpServletRequest是怎么封装的,所以才有了recursionRetrieveRequestFacade
@Component public class FillAuthorizationBasicAuthenticationFilter extends OncePerRequestFilter { private Object recursionRetrieveRequestFacade(Field source, Object object) throws IllegalAccessException { try { Object target = source.get(object); if (target instanceof RequestFacade) { return target; } return recursionRetrieveRequestFacade(source, target); } catch (IllegalAccessException e) { System.out.println(e.getMessage()); return null; } } @Override protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException { try { Field field = ReflectionUtils.findField(ServletRequestWrapper.class, "request", ServletRequest.class); field.setAccessible(true); RequestFacade request = (RequestFacade) recursionRetrieveRequestFacade(field, httpServletRequest); Field connectorField = ReflectionUtils.findField(RequestFacade.class, "request", Request.class); connectorField.setAccessible(true); Request connectorRequest = (Request) connectorField.get(request); Field coyoteField = ReflectionUtils.findField(Request.class, "coyoteRequest", org.apache.coyote.Request.class); coyoteField.setAccessible(true); org.apache.coyote.Request coyoteRequest = (org.apache.coyote.Request) coyoteField.get(connectorRequest); // 从 org.apache.coyote.Request 中获取 MimeHeaders Field mimeHeadersField = ReflectionUtils.findField(org.apache.coyote.Request.class, "headers", MimeHeaders.class); mimeHeadersField.setAccessible(true); MimeHeaders mimeHeaders = (MimeHeaders) mimeHeadersField.get(coyoteRequest); this.mineHeadersHandle(mimeHeaders, httpServletRequest); } catch (Exception e) { System.out.println(e.getMessage()); } super.doFilter(httpServletRequest, httpServletResponse, filterChain); } protected void mineHeadersHandle(MimeHeaders mimeHeaders, HttpServletRequest request) { if (!Strings.isBlank(mimeHeaders.getHeader("Authorization"))) { return; } mimeHeaders.addValue("Authorization").setString("Basic Y2xpZW50OnNlY3JldA=="); } }
步骤1:在BasicAuthenticationFilter插入自定义过滤器
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/oauth/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().and()
.csrf().disable();
http.addFilterBefore(fillAuthorizationBasicAuthenticationFilter, BasicAuthenticationFilter.class);
}
浙公网安备 33010602011771号