[SPRING] 조건부로 사용자가 JSP로 렌더링
SPRING조건부로 사용자가 JSP로 렌더링
스프링 보안 및 MVC 프레임 워크를 사용하기위한 간단한 포럼을 만들려고합니다.
간단히하기 위해 다음과 같은 포럼 게시물을 볼 JSP가 있습니다.
<body>
...
Title: ${forumPost.title} <br>
Author: ${forumPost.author.name} <br>
Message: {forumPost.message} <br>
<security:authorize ifAnyGranted="ROLE_ADMIN">
Edit: <a href="/edit">Edit</a>
</security:authorize>
...
</body>
내 문제는 : 관리자가이 게시물을 편집 할 수있을뿐만 아니라 원래 작성자도 가능해야한다는 것입니다. 따라서 ROLE_ADMIN과 원저자 만 편집 링크를 볼 수 있습니다. 그러나 사용자가 security : authorize 태그를 사용하여 필터링하는 방법을 모르거나 다른 방식으로이 태그를 사용해야하는 경우
어떤 제안이라도 대단히 감사 할 것입니다. 감사!
해결법
-
==============================
1.이 페이지 뒤에 컨트롤러가 있다고 가정하면 ModelEndView에 canEditPost 필드를 추가하면됩니다 (세미 의사 코드).
이 페이지 뒤에 컨트롤러가 있다고 가정하면 ModelEndView에 canEditPost 필드를 추가하면됩니다 (세미 의사 코드).
private boolean isAdmin() { Authentication currentAuthObj = SecurityContextHolder.getContext().getAuthentication(); List<GrantedAuthority> authorities = Arrays.asList(currentAuthObj.getAuthorites()); for (GrantedAuthority auth : authorities) { if ("ROLE_ADMIN".equals(auth.getAuthority())) { return true; } } return false; } boolean currentUserIsAuthor = ...; modelAndView.addObject("canEditPost", Boolean.valueOf(currentUserIsAuthor || isAdmin());
그리고 나서 $ canEditPost를 참조하십시오.
일반적으로보기에서 뷰 / 템플릿이 실제 논리를 수행하는 것보다 모델의 간단한 플래그를 참조하는 것이 좋습니다.
-
==============================
2.Author 객체가 각 작성자가 고유 한 방식으로 equals를 구현합니까?
Author 객체가 각 작성자가 고유 한 방식으로 equals를 구현합니까?
그렇다면 작성자가 현재 사용자 (두 세트의 태그가 있음)와 동일한 지 여부를 간단히 확인할 수 있습니다.
-
==============================
3.당신은 조건을 가질 수 있습니다.
당신은 조건을 가질 수 있습니다.
<% if(mycondition.isTrue()){ %> <security:authorize ifAnyGranted="ROLE_ADMIN"> Edit: <a href="/edit">Edit</a> </security:author <% }%>
-
==============================
4.@matt b의 대답은 그것을 할 수있는 좋은 방법이며 아마 내가 끝낼 것입니다. 그러나 나는 조금 더 복잡하지만 내가이 게시물에 넣은 것을 성취 할 다른 방법을 발견했다.
@matt b의 대답은 그것을 할 수있는 좋은 방법이며 아마 내가 끝낼 것입니다. 그러나 나는 조금 더 복잡하지만 내가이 게시물에 넣은 것을 성취 할 다른 방법을 발견했다.
나는 약간의 독서를했고 당신이 도메인 객체 레벨에서 보안을 처리 할 수 있고 본질적으로 역할이나 임의의 객체 (예 : 현재 사용자 ID)에 읽기 / 쓰기 / 삭제 권한을 부여 할 수 있다는 것을 알아 냈습니다. 이 예에서는 현재 사용자 ID에 도메인 개체 (이 경우 데이터베이스의 고유 한 ID가있는 ForumPost 개체)에 대한 액세스 권한을 부여합니다.
현재 사용자 ID는 읽기 및 쓰기 권한이 부여되며 XML 구성을 통해 사용자 지정 역할로 정의 될 수 있습니다 (올바른 용어는 실제로 유권자입니다). 그러면 나는이 유권자를 MESSAGE__EDIT라고 지명 할 수 있습니다.
그래서, 내 JSP에서 다음 사용할 수 있습니다.
보안 : authorize ifAnyGranted = "MESSAGE_EDIT"
그리고 (다시 XML 구성을 통해) 현재 사용자 ID를 얻고 현재 도메인 객체 (이 경우에는 ForumPost 객체)를 기반으로 액세스 권한을 부여합니다.
그것은 소리보다 약간 더 많은 일이지만, 확실히 할 수 있습니다.
이 모든 것에 대한 일부 문서는 Spring Security Reference Documentation의 Domain Object Security 섹션에서 찾을 수 있습니다 (http://static.springframework.org/spring-security/site/reference/html/springsecurity.html (어떤 이유로 link 도메인 객체 보안 섹션은 현재 깨져 있습니다.)).
from https://stackoverflow.com/questions/935666/conditionally-render-in-jsp-by-user by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @Component Hibernate 클래스 (0) | 2019.05.17 |
---|---|
[SPRING] 스프링 웹을 사용하여 게시물 데이터와 함께 https 게시물 요청 보내기 (0) | 2019.05.17 |
[SPRING] 봄 부팅시 봄 부팅 시동 테스트 (0) | 2019.05.17 |
[SPRING] 바람둥이 시작시 ClassNotFoundException 오류 (0) | 2019.05.17 |
[SPRING] 순수 자바에서 스프링 기본 설정을 무시하지 않고 스프링 부트 응용 프로그램에서 Jackson을 구성하는 방법 (0) | 2019.05.17 |