Идеальный @Preauthorize ("isauthenticated ()") по умолчанию, в то время как все еще возможно переопределить это, явно указав @preauthorize (или другие аннотации, такие как @permitall ). Конечно, это может быть достигнуто, аннотировав сами @controller , как следующее, но вы все равно можете отменить аннотирование одного, что является причиной, по которой я хотел бы более глобальное решение:
Код: Выделить всё
@RestController
@PreAuthorize("isAuthenticated()")
public class TestController {
@GetMapping("/test")
@PreAuthorize("permitAll()")
public void test() {}
}
< /code>
Я попытался следить за документацией, в которой говорится: < /p>
Важно помнить, что, когда вы используете безопасность метода, основанные на аннотациях, тогда нездоровые методы не защищены. Чтобы защитить от этого, объявите правило авторизации все уловки в вашем экземпляре Httpsecurity.
Поэтому я сохранил Spring Boot по умолчанию. doc: < /p>
@Bean
public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((requests) -> requests.anyRequest().authenticated());
http.formLogin(withDefaults());
http.httpBasic(withDefaults());
return http.build();
}
Код: Выделить всё
@Configuration
@EnableMethodSecurity
public class SecurityConfiguration {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
//http.authorizeHttpRequests((requests) -> requests.anyRequest().authenticated());
http.formLogin(withDefaults());
http.httpBasic(withDefaults());
return http.build();
}
@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
Advisor preAuthorize() {
return AuthorizationManagerBeforeMethodInterceptor.preAuthorize(AuthenticatedAuthorizationManager.authenticated());
}
}
Код: Выделить всё
public static AuthorizationManagerBeforeMethodInterceptor preAuthorize(
PreAuthorizeAuthorizationManager authorizationManager) {
AuthorizationManagerBeforeMethodInterceptor interceptor = new AuthorizationManagerBeforeMethodInterceptor(
AuthorizationMethodPointcuts.forAnnotations(PreAuthorize.class), authorizationManager);
interceptor.setOrder(AuthorizationInterceptorsOrder.PRE_AUTHORIZE.getOrder());
return interceptor;
}
Подробнее здесь: https://stackoverflow.com/questions/777 ... ticated-by