@Roles Allowed vs. @PreAuthorize vs. @Secured
기본적인 Spring Boot 앱이 있습니다.Spring Initializer, Embedded Tomcat, Tymeleaf 템플릿엔진 및 패키지를 실행 가능한 JAR 파일로 사용합니다.
컨트롤러를 보호하려고 합니다.
@Controller
@RequestMapping("/company")
@RolesAllowed({"ROLE_ADMIN"})
@PreAuthorize("hasRole('ADMIN')")
@Secured("ADMIN")
public class CompanyController {
}
여러 가지 옵션이 있다는 것은 알지만 어떤 옵션을 사용해야 할지 잘 모르겠습니다.
보안 주석
의 모든@PreAuthorize
,@RolesAllowed
그리고.@Secured
는 메서드 보안을 설정할 수 있는 주석입니다.이러한 제한은 개별 메서드 또는 클래스레벨 모두에 적용할 수 있습니다.후자의 경우 보안 제약이 클래스 내의 모든 메서드에 적용됩니다.
메서드 레벨의 보안은 Spring AOP 프록시를 사용하여 실현됩니다.
@PreAuthorize
@PreAuthorize
주석을 사용하면 Spring Expression Language(SpEL)를 사용하여 메서드에 대한 액세스 제한을 지정할 수 있습니다.이러한 제약조건은 메서드가 실행되기 전에 평가되며 제약조건이 충족되지 않으면 메서드의 실행이 거부될 수 있습니다.그@PreAuthorize
주석은 Spring Security 프레임워크의 일부입니다.
사용할 수 있도록@PreAuthorize
, 의 Atribute@EnableGlobalMethodSecurity
주석을 다음으로 설정해야 합니다.true
:
@EnableGlobalMethodSecurity(prePostEnabled=true)
@RolesAllowed
@RolesAllowed
주석은 JSR-250 Java 보안 표준에서 유래합니다.이 주석은 다음 주석에 비해 더 제한적입니다.@PreAuthorize
주석 기능은 역할 기반 보안만 지원하므로 주석 기능을 사용할 수 있습니다.
를 사용하려면@RolesAllowed
주석은 스프링 보안에 속하지 않으므로 이 주석을 포함하는 라이브러리가 클래스 경로에 있어야 합니다.또한 의 Atribute는@EnableGlobalMethodSecurity
주석을 다음으로 설정해야 합니다.true
:
@EnableGlobalMethodSecurity(jsr250Enabled=true)
@Secured
@Secured
annotation은 기존 Spring Security 2 주석으로 메서드보안 설정에 사용할 수 있습니다.역할 기반 보안뿐만 아니라 Spring Expression Language(SPEL; 스프링 표현 언어)를 사용하여 보안 제약 조건을 지정할 수도 없습니다.를 사용할 것을 권장합니다.@PreAuthorize
이 주석 위에 새 응용 프로그램의 주석을 추가합니다.
에 대한 지원@Secured
주석을 명시적으로 활성화해야 합니다.@EnableGlobalMethodSecurity
다음 속성을 사용하여 주석을 사용합니다.
@EnableGlobalMethodSecurity(securedEnabled=true)
SpEL을 사용할 수 있는 보안 주석
다음 표는 Spring Security 5에서 사용할 수 있는 보안 주석의 Spring Expression Language 지원을 보여 줍니다.
╔═════════════════════╦═══════════════════╗
║ Security Annotation ║ Has SpEL Support? ║
╠═════════════════════╬═══════════════════╣
║ @PreAuthorize ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @PostAuthorize ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @PreFilter ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @PostFilter ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @Secured ║ no ║
╠═════════════════════╬═══════════════════╣
║ @RolesAllowed ║ no ║
╚═════════════════════╩═══════════════════╝
@Secured
★★★★★★★★★★★★★★★★★」@RolesAllowed
이치노 점은 '하다'는 것입니다.@Secured
이며, Annotaiton은 다음과 같습니다.@RolesAllowed
Java (JSR250) 。SpEL을 사용하다
@PreAuthorize
하다 하다 보면 더 강력한 조작을 할 수 .@PreAuthorize
SPEL을 사용하다메서드에 전달된 역할/권한, 현재 인증된 사용자 및 인수를 기반으로 메서드 호출 제한 식을 작성할 수 있습니다.
@PreAuthorize("hasRole('ADMIN') or #user.id == authentication.name")
public void deleteUser(User user) {
...
}
어떤 것을 사용할지는 당신에게 달려 있습니다. @Secure
★★★★★★★★★★★★★★★★★」@PreAuthorize
봄가 되지 않거나 를 하십시오.@PreAuthorize
.
과 동일하지만, 이것은 의 목적과 같습니다.@PreAuthorize
는 컨트롤러 및 컨트롤러 방식에 가장 적합합니다. @Secured
★★★★★★★★★★★★★★★★★」@RolesAllowed
는 서비스 레이어 보안 Atribute를 기술하는 것을 목적으로 하고 있습니다.
also, 음 also, 음음, 음음 도 주의해 주세요.@PreAuthorize
주석 기능을 사용하려면 구성 클래스를 정의해야 합니다.
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
...
}
언급URL : https://stackoverflow.com/questions/43961625/rolesallowed-vs-preauthorize-vs-secured
'programing' 카테고리의 다른 글
성공/오류/최종/각도로 약속 사용JS (0) | 2023.03.15 |
---|---|
같은 테이블의 여러 열에 대한 내부 결합 실행 (0) | 2023.03.15 |
합계 및 tax_total Woocommerce 변경 (0) | 2023.03.15 |
Javascript 긴 정수 (0) | 2023.03.15 |
C# .NET의 복잡한 JSON 오브젝트를 시리얼 해제하려면 어떻게 해야 하나요? (0) | 2023.03.15 |