@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) {
...
}
Что касается использования, это действительно зависит от вас. @Secure
и @PreAuthorize
свяжет ваш код с весной. Если привязка к пружине не является проблемой или вам нужно выполнить более мощные операции, используйте @PreAuthorize
.
все они в основном одинаковы для вашей цели, но @PreAuthorize
самое лучшее приспособленное для регуляторов и методов регулятора. @Secured
и @RolesAllowed
предназначены для описания атрибутов безопасности уровня сервиса.
также имейте в виду для @PreAuthorize
аннотация для работы необходимо определить класс конфигурации:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
...
}