Spring Security的permitAll不适用于某些端点

安东·科洛索克(Anton Kolosok)

我有

@Configuration
@EnableWebSecurity

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
                .antMatchers(HttpMethod.POST, "/api/v1/account/import").permitAll()
                .anyRequest().authenticated()
                .and()
            .addFilterBefore(new JWTAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
    }

我希望所有用户都可以参加而/api/v1/account/import无需任何JWT令牌检查。对于所有其他端点,我希望在类中进行JWT令牌签入JWTAuthenticationFilter我尝试了许多不同的方案,但都失败了。我总是去JWTAuthenticationFilterJWTAuthenticationFilter如果我去的话我不想/api/v1/account/import

我的控制器:

@RestController
@RequestMapping(value = "/api/v1/account")
public class AccountController {

    private final AccountService accountService;

    public AccountController(final AccountService accountService) {
        this.accountService = accountService;
    }

    @PostMapping(path = "/import")
    @ResponseStatus(HttpStatus.ACCEPTED)
    public String importAccount(@Valid @RequestBody final ImportAccountDto importAccountDto) {
        return this.accountService.importAccount(importAccountDto);
    }

我的JWT过滤器:

public class JWTAuthenticationFilter extends GenericFilterBean {

    @Override
    public void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain filterChain) throws IOException, ServletException {

        final HttpServletRequest request = (HttpServletRequest) req;
        final HttpServletResponse response = (HttpServletResponse) res;
        final String token = request.getHeader("Authorization");

        final JJWTService jjwtService = new JJWTService();

        if (token == null || !jjwtService.parseJWTToken(token)) {
            response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
        } else {
            filterChain.doFilter(req, res);
        }
    }

我的测试:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class AccountIT {

    @Autowired
    MockMvc mockMvc;

    @Autowired
    private AccountRepository accountRepository;

    @Test
    public void importAccount() throws Exception {

        this.mockMvc.perform(post("/api/v1/account/import")
                .contentType(MediaType.APPLICATION_JSON)
                .content(toJson(importAccountDto)))
                .andExpect(status().isAccepted())
                .andReturn();
    }
赛义夫·阿里

试试这个

if (!request.getRequestURI().contains("/api/v1/account/import")) {
    final JJWTService jjwtService = new JJWTService();

    if (token == null || !jjwtService.parseJWTToken(token)) {
        response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
    } else {
        filterChain.doFilter(req, res);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

REST APIS 的 Spring Security 不适用于某些角色

使用Spring Boot / Spring Security配置公共端点仅适用于GET,不适用于POST

Spring Security注销不适用于Spring 4 CORS

某些事务传播不适用于Spring / Hibernate 4

Spring Security jdbcAuthentication不适用于默认角色处理

Grails-Spring Security不适用于Mysql 8

Spring Security CORS不适用于Http PUT方法

@PreAuthorize批注不适用于Spring Security

Spring Security CSRF令牌不适用于AJAX

Spring Security 标记库不适用于 JSF

从Spring Security OAuth2迁移到Keycloak时,如何解决`permitAll仅适用于HttpSecurity.authorizeRequests()`?

Spring security ignore url 不适用于 we security ignore 方法

注销不适用于 Spring Boot、Spring Security 和 Thymleaf

Spring Saml不适用于最新的Spring Security 4.0.0.RELEASE

Spring“cacheNames”不适用于“key”

@PostFilter不适用于Spring @Aspect

RedirectAttributes不适用于Spring 5

Spring表格不适用于jsp

SessionAttributes不适用于Spring Boot

JsonIgnoreProperties不适用于Spring Boot

AngularJS模板不适用于Spring

Spring Boot http响应压缩不适用于某些User-Agent

适用于 Android 的 Spring-Security

Spring Security不适用于授权:OAuth2的承载令牌

Spring Security antMatcher表达式不适用于路径变量

Spring Security @WithMockUser似乎不适用于状态更改动词(post,put ..)

Kubernetes Ingress-nginx粘性会话不适用于Spring Security

Spring Security不适用于“ hasRole('ROLE_ADMIN')”或ROLE_ADMIN

Spring安全配置不适用于Spring SimpleUrlHandlerMapping