여러 역할을 확인 하는 데 사용 하는 방법은 무엇입니까?
Spring Security JSP 태그립을 사용하여 역할을 기준으로 일부 콘텐츠를 조건부로 표시하려고 합니다.그러나 Spring Security 3.1.x에서는 하나의 역할만 확인합니다.
AllGranted가 사용되지 않는 경우 사용할 수 있습니다.
도와드릴까요?
스프링 보안에는 특별한 보안 표현이 있습니다.
hasAnyRole(역할 목록) - 사용자에게 지정된 역할(쉼표로 구분된 문자열 목록으로 제공됨)이 부여된 경우 true입니다.
저는 그것을 사용해 본 적이 없지만 당신이 찾고 있는 것이 바로 그것이라고 생각합니다.
사용 예:
<security:authorize access="hasAnyRole('ADMIN', 'DEVELOPER')">
...
</security:authorize>
다음은 표준 스프링 보안 표현식이 설명된 참조 문서에 대한 링크입니다.또한, 필요한 경우 사용자 지정 표현식을 만드는 방법에 대해 설명한 내용이 있습니다.
@디마스의 대답이 당신의 질문과 논리적으로 일치하지 않습니다.ifAllGranted
로 직접 대체할 수 없습니다.hasAnyRole
.
Spring Security 3—>4 마이그레이션 가이드:
이전:
<sec:authorize ifAllGranted="ROLE_ADMIN,ROLE_USER">
<p>Must have ROLE_ADMIN and ROLE_USER</p>
</sec:authorize>
새로 만들기(SPeL):
<sec:authorize access="hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')">
<p>Must have ROLE_ADMIN and ROLE_USER</p>
</sec:authorize>
교체ifAllGranted
와 직접적으로hasAnyRole
스프링이 다음을 사용하여 진술을 평가하도록 할 것입니다.OR
대신에AND
.그것은,hasAnyRole
돌아올 것입니다true
인증된 주체에 지정된 역할 중 하나 이상이 포함되어 있는 반면 Spring의 역할(현재 Spring Security 4에서 사용되지 않음)ifAllGranted
메서드만 반환됨true
인증된 주체에 지정된 역할이 모두 포함된 경우.
TL;DR: 동작을 복제하는 방법ifAllGranted
Spring Security Taglib의 새로운 인증 표현 언어를 사용하여,hasRole('ROLE_1') and hasRole('ROLE_2')
패턴을 사용해야 합니다.
사용했습니다hasAnyRole('ROLE_ADMIN','ROLE_USER')
하지만 나는 오류 아래 콩 창작물을 받고 있었습니다.
Error creating bean with name 'org.springframework.security.web.access.intercept.FilterSecurityInterceptor#0': Cannot create inner bean '(inner bean)' of type [org.springframework.security.web.access.expression.ExpressionBasedFilterInvocationSecurityMetadataSource] while setting bean property 'securityMetadataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#2': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.security.web.access.expression.ExpressionBasedFilterInvocationSecurityMetadataSource]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: Expected a single expression attribute for [/user/*]
그 다음에 나는 노력했습니다.
access="hasRole('ROLE_ADMIN') or hasRole('ROLE_USER')"
저한테는 잘 작동하고 있어요.
내 사용자 중 한 명이 관리자이자 사용자이기 때문입니다.
이를 위해 추가해야 합니다.use-expressions="true" auto-config="true"
http 태그 뒤에 붙습니다.
<http use-expressions="true" auto-config="true" >.....</http>
Spring Boot 2.4 내에서는
sec:authorize="hasAnyRole('ROLE_ADMIN')
다음 항목이 있는지 확인합니다.
백합잎-백합-스프링 보안5
당신들의 종속 속에.또한 네임스페이스를 포함해야 합니다.
xmlns:sec="http://www.thymeleaf.org/extras/spring-security"
html에...
만약 당신이 타임리프를 사용하고 있다면 당신은 이 방법으로 시도할 수 있습니다.
sec:authorize="hasAnyRole('ROLE_ADMIN','ROLE_USER')"
hasAnyRole은 인증된 주체에 지정된 역할 중 하나 이상이 포함되어 있으면 true를 반환하고, 포함되지 않으면 false를 반환합니다.
다음과 같이 HTML 선언 태그에 sec 태그를 사용해야 합니다.
<html xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
언급URL : https://stackoverflow.com/questions/11469211/how-to-use-secauthorize-access-hasroleroles-for-checking-multiple-roles
'programing' 카테고리의 다른 글
TypeScript를 사용하는 Angular2의 http 데이터에서 RxJS 관찰 가능한 항목 연결 (0) | 2023.08.14 |
---|---|
월 이름을 월 번호에 매핑하거나 그 반대의 경우는 어떻게 합니까? (0) | 2023.08.14 |
도커의 MariaDB Galera 클러스터에서 "WSREP: SST failed: 1(조작이 허용되지 않음)"을 디버깅하는 방법은 무엇입니까? (0) | 2023.08.14 |
Xcode 4.4 오류 - 앱 실행을 기다리는 동안 시간 초과됨 (0) | 2023.08.14 |
iPhone xib를 iPad xib로 변환하시겠습니까? (0) | 2023.08.09 |