java 是否可以将JWT仅应用于在Spring Security 6中创建的端点?[关闭]

hivapdat  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(118)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

15小时前关门了。
这篇文章是编辑并提交审查8小时前.
Improve this question
我是Sping Boot 的新手。我想用JWT专门为我的端点处理身份验证,对于所有其他与我的API不匹配的请求,我想使用404消息。我有这个配置,但我无法处理403错误。

@Bean
  public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
        .csrf()
        .disable()
        .authorizeHttpRequests()
          .requestMatchers(endpoints)).authenticated()
          .anyRequest().permitAll()
        .and()
        .sessionManagement()
          .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
        .authenticationProvider(authenticationProvider)
        .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class);

    return http.build();
  }

更新:我一直在阅读答案,似乎创建自定义过滤器被认为是一种不好的做法。404和403错误是否可以通过消息来处理?如果是这样,我如何才能做到这一点?

mwngjboj

mwngjboj1#

您需要使用WebSecurityConfigurerAdapter来确保Spring Security ,任何匹配**/API/****模式的请求都应该使用JWT进行身份验证,任何不匹配的请求都可以在没有JWT的情况下调用,因为这个**anyRequest().permitAll()**简单的方法

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/api/**").authenticated() 
            .anyRequest().permitAll()
            .and()
            .addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
}

更新对不起快速跳转上Spring忘记了是3.0在这里另一种方式,但没有测试这样做,你将有多个过滤器和定义不同的安全配置也取决于版本可能有一些功能,是不赞成你可能需要看文档。我离开了我的其他人的答案享受拇指哑巴,因为他们喜欢验证他们的点,而不给任何解决方案,以帮助。

@Configuration
@EnableWebSecurity
public class SecurityConfig {

@Bean
public SecurityFilterChain apiSecurityFilterChain(HttpSecurity http) throws Exception {
    http
            .securityMatchers((matchers) -> matchers
                    .requestMatchers(antMatcher("/api/**"), antMatcher("/app/**"))
            ).addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
            
    return http.build();
}

@Bean
public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .anyRequest().permitAll();
    
    return http.build();
}

}

相关问题