亲爱的
在以下问题上需要帮助。
我正在尝试创建一个通用的身份验证库,以供多个MFE应用程序使用。 该库取决于Spring Web Security。 如果WebSecurityConfigurerAdapter实现位于库中,则不会应用该问题,但是如果将其直接用于应用程序中,它将起作用。
错误:OPTIONS方法失败
在两种情况下(在库内部,直接在应用程序内部)启动应用程序时,都会调用Configure()方法的更多信息
以下是成功请求的屏幕截图(直接在应用程序内部) success inside app directly
以下是失败请求的屏幕截图(在库内部) Failure inside the library
下面是WebSecurityConfigurerAdapter实现:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class JWTWebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtUnAuthorizedResponseAuthenticationEntryPoint jwtUnAuthorizedResponseAuthenticationEntryPoint;
@Autowired
private UserDetailsService jwtInMemoryUserDetailsService;
@Autowired
private JwtTokenAuthorizationOncePerRequestFilter jwtAuthenticationTokenFilter;
@Value("${jwt.get.token.uri}")
private String authenticationPath;
@Bean
public PasswordEncoder passwordEncoderBean() {
return new BCryptPasswordEncoder();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(jwtInMemoryUserDetailsService)
.passwordEncoder(passwordEncoderBean());
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.csrf().disable()
.exceptionHandling().authenticationEntryPoint(jwtUnAuthorizedResponseAuthenticationEntryPoint).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests()
.anyRequest().authenticated();
httpSecurity
.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
httpSecurity
.headers()
.frameOptions().sameOrigin() //H2 Console Needs this setting
.cacheControl(); //disable caching
}
@Override
public void configure(WebSecurity webSecurity) throws Exception {
webSecurity
.ignoring()
.antMatchers(
HttpMethod.POST,
authenticationPath
)
.antMatchers(HttpMethod.OPTIONS, "/**")
.and()
.ignoring()
.antMatchers(
HttpMethod.GET,
"/" //Other Stuff You want to Ignore
)
.and()
.ignoring()
.antMatchers("/h2-console/**/**");//Should not be in Production!
}
}
结论:否,我正在创建一个使用Spring Security的库 在这个库中的实现 WebSecurityConfigurerAdapter。将此库添加为 另一个应用程序,则它不起作用。虽然如果使用这个 直接在应用程式本身上执行即可。注意:这个 库包含过滤器以及与JWT实现相关的所有内容 这将是多个应用程序的可重用库。