@RolesAllowed против @PreAuthorize против @Secured

У меня есть основное приложение SpringBoot. использование Spring Initializer, embedded Tomcat, Thymeleaf template engine и пакета в качестве исполняемого файла JAR.

Я хочу защитить контроллер:

@Controller
@RequestMapping("/company")
@RolesAllowed({"ROLE_ADMIN"})
@PreAuthorize("hasRole('ADMIN')")
@Secured("ADMIN")
public class CompanyController {
}

Я знаю, что есть разные варианты, но я действительно не знаю, что я должен использовать

2 ответов


@Secured и @RolesAllowed выполнить идентичную функциональность весной. Разница в том, что @Secured Весна конкретных annotaiton а @RolesAllowed является стандартной аннотацией Java (JSR250). Ни одна из этих аннотаций не поддерживает SpEL.

@PreAuthorize является еще одной весной конкретной аннотации. Вы можете выполнять гораздо более мощные операции с помощью @PreAuthorize использование SpEL. Вы можете написать выражения вызов метода limit на основе ролей / разрешений, текущей проверки подлинности user, и аргументы, переданные в метод.

@PreAuthorize("hasRole('ADMIN') or #user.id == authentication.name")
public void deleteUser(User user) {
    ...
}

http://docs.spring.io/autorepo/docs/spring-security/4.0.x/reference/html/el-access.html#el-common-built-in


Что касается использования, это действительно зависит от вас. @Secure и @PreAuthorize свяжет ваш код с весной. Если привязка к пружине не является проблемой или вам нужно выполнить более мощные операции, используйте @PreAuthorize.


все они в основном одинаковы для вашей цели, но @PreAuthorize самое лучшее приспособленное для регуляторов и методов регулятора. @Secured и @RolesAllowed предназначены для описания атрибутов безопасности уровня сервиса.

также имейте в виду для @PreAuthorize аннотация для работы необходимо определить класс конфигурации:

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
...
}