WebSecurityConfigurerAdapter实现在库内部不起作用

时间:2020-04-05 20:46:35

标签: spring-boot spring-security

亲爱的

在以下问题上需要帮助。

我正在尝试创建一个通用的身份验证库,以供多个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实现相关的所有内容 这将是多个应用程序的可重用库。

0 个答案:

没有答案