Я пытаюсь защитить конечную точку REST с помощью аннотации @Secured Spring Security.Мое основное приложение (Spring Boot App) с конфигурацией безопасности и контроллером остатка находятся в разных пакетах и проекте.
Основной пакет приложения: com.myapp.api.web
Пакет контроллера остатка: com.myapp.api.rest
Mainapp:
@SpringBootApplication
@ComponentScan(basePackages = "com.myapp.api")
@EntityScan("com.myapp.api")
@RestController
public class ApiApplication extends SpringBootServletInitializer
{
public static void main(String[] args)
{
SpringApplication.run(ApiApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
{
return application.sources(ApiApplication.class);
}
}
Конфигурация безопасности:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true,
securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter
{
private static final String USERS_CONFIG_FILE_NAME = "users.yml";
@Override
protected void configure(HttpSecurity http) throws Exception
{
http
.httpBasic()
.and()
.csrf().disable();
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Bean
public PasswordEncoder passwordEncoder()
{
return new BCryptPasswordEncoder();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth,
InMemoryUserDetailsManager inMemoryUserDetailsManager, PasswordEncoder passwordEncoder) throws Exception
{
auth.userDetailsService(inMemoryUserDetailsManager).passwordEncoder(passwordEncoder);
}
@Bean
public InMemoryUserDetailsManager inMemoryUserDetailsManager() throws IOException
{
return new InMemoryUserDetailsManager(
PropertiesLoaderUtils.loadAllProperties(USERS_CONFIG_FILE_NAME, getClass().getClassLoader()));
}
}
Контроллер покоя:
@RestController
public class RestController
{
private final RestService service;
@PostMapping("/rest/v1")
@Secured({"ROLE_ADMIN"})
public List<String> getStates(@RequestBody List<String> Ids)
{
...
}
Моя конечная точка покоя работает, пока меня нетнастройка securedEnabled = true .После установки true я получаю 404 Not Found как ответное сообщение.Я уже отладил его и обнаружил, что Spring Security иногда останавливается в цепочке фильтров и что запрос никогда не достигает контроллера.
Насколько я тестировал, пока контроллер остальных находится в другом проекте, эта ошибка будет происходить.После перемещения его в тот же проект он работает как надо.
Чего-то не хватает в моем Securityconfig или в чем может быть проблема?