I'm trying to configure SpringSecurity for my application, but despite using permitAll() for one of my endpoints(/api/authorization/company-login) I keep getting 404 exceptions. For other endpoints, I get 403 (Forbidden) which is completely right cause I also use anyRequest().authenticated(), for the others. So it seems that while anyRequest().authenticated() works, permitAll doesn't.
I'm also sure that I put it in the right order, cause my permitAll() is before anyRequest().authenticated().
Path to the endpoint also seems right cause if I would change path in: antMatchers("/api/authorization/company-login").permitAll() for some other then for /api/authorization/company-login I'm getting 403 (what is expected in such case). I'm not sure what is wrong in my configuration and how to make /api/authorization/company-login endpoint accessible for all.
Dependencies I use for spring security:
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
</dependency>
My spring security configuration:
@Configuration
@EnableWebSecurity
public class SpringSecurityConfiguration {
@Autowired
private GoAuthorizationFilter goAuthorizationFilter;
@Autowired
private GoAuthenticationEntryPoint goAuthenticationEntryPoint;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.exceptionHandling()
.authenticationEntryPoint(goAuthenticationEntryPoint).and()
.sessionManagement().and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilterBefore(goAuthorizationFilter, UsernamePasswordAuthenticationFilter.class)
.authorizeRequests()
.antMatchers("/api/authorization/company-login").permitAll()
.anyRequest().authenticated();
return http.build();
}
Authentication Entry Point:
@Component
public class GoAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
}
}
GoAuthorizationFilter:
@Service
public class GoAuthorizationFilter extends OncePerRequestFilter {
@Transactional
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
filterChain.doFilter(request, response);
}
}
While I was trying to make it work I also got rid of AuthenticationEntryPoint but it seemed to have no impact. What is more my filter has no logic implemented yet, so I know that it is not the cause of my problem.
My question is, what is wrong with my configuration, and why despite permitAll() I'm receiving 404 exceptions?