Spring 보안으로 로그인한 사용자에게 조건부로 jsp 컨텐츠를 보여주는 방법
로그인한 모든 사용자에게 컨텐츠를 표시하고 로그인하지 않은 경우 숨기려고 합니다.jsp와 spring security를 사용하고 있습니다.
물론 집에서 직접 만든 해결책은 쉽게 이루어질 수 있습니다.하지만 이를 달성하기 위한 가장 깨끗한 표준 방법은 무엇일까요?
스프링 보안 태그는 미래에 새로운 역할을 추가할 수 있는 좋은 방법이 아닌 것 같습니다.
저는 다음과 같은 성공을 거두었습니다.
<sec:authorize ifAnyGranted="ROLE_ANONYMOUS">
<td><a href="<c:url value="/login.htm"/>">Login</a></td>
</sec:authorize>
<sec:authorize ifNotGranted="ROLE_ANONYMOUS">
<td><a href="<c:url value="/j_spring_security_logout"/>">Logout</a></td>
</sec:authorize>
여기서 논리에 영향을 주지 않고 새로운 역할을 추가할 수 있습니다.
이 답변을 Spring Security 3의 최신 버전으로 업데이트하려면isAnonymous()
그리고.isAuthenticated()
표현들은 지금까지 같은 것을 성취하기 위해 잘 조합되었습니다.예는 다음과 같습니다.
<sec:authorize access="isAnonymous()">
<form method="POST" action="<c:url value='j_spring_security_check'/>">
Username: <input name="j_username" type="text" value="${SPRING_SECURITY_LAST_USERNAME}" />
Password: <input name="j_password" type="password" />
<input type="submit" value="Sign in" />
</form>
</sec:authorize>
<sec:authorize access="isAuthenticated()">
<a href="<c:url value="/j_spring_security_logout" />">Logout</a>
</sec:authorize>
현재 버전(3.1 이전 버전일 수 있음)은 결과를 속성에 저장하기 위한 다양한 매개 변수를 지원합니다.이를 통해 다음을 코드화할 수 있습니다.
<sec:authorize var="loggedIn" access="isAuthenticated()" />
<c:choose>
<c:when test="${loggedIn}">
You are logged in
</c:when>
<c:otherwise>
You are logged out
</c:otherwise>
</c:choose>
태그에 Spring EL을 사용하시면 됩니다.<sec:authorize />
, 다음과 같이:
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<sec:authorize access="isAuthenticated()">
YES, you are logged in!
</sec:authorize>
이건 어때요? - 스프링 2.5 준수 ;-)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
<security:authorize ifAllGranted="ROLE_USER">
Welcome <%= request.getUserPrincipal().getName() %>
<a href="<c:url value="/j_spring_security_logout"/>">Logout</a><br/>
</security:authorize>
다음은 어떻습니까?
<%@ taglib uri="http://acegisecurity.org/authz" prefix="authz" %>
<c:set var="authenticated" value="${false}"/>
<authz:authorize ifAllGranted="ROLE_USER">
<c:set var="authenticated" value="${true}"/>
</authz:authorize>
<c:if test="${authenticated}">
<!-- your secure content here -->
</c:if>
내가 이걸 암호화할 때 사용했던 가장 단순한...
<%
if (request.getRemoteUser()== null) {%>
<!-- put public-only information-->
<%}%>
제가 하는 방법은 이렇습니다.
<%@ page import="org.springframework.security.context.SecurityContextHolder" %>
<c:if test="<%=SecurityContextHolder.getContext().getAuthentication() != null %>">
<!-- your secure content here -->
</c:if>
이것도 당신에게 도움이 된다면 저에게 알려주세요.
-aj
당신은 이 안에 jsp 스프링 보안 태그를 사용할 수 있습니다.
request.getUserPrincipal().getName()
언급URL : https://stackoverflow.com/questions/1638170/how-to-conditionally-show-jsp-content-to-logged-in-users-with-spring-security
'programing' 카테고리의 다른 글
성공적인 업데이트가 -1 행을 반환하는 이유는 무엇입니까? (0) | 2023.09.07 |
---|---|
Powershell 스크립트에서 TeamCity 시스템 속성에 액세스할 수 있는 방법이 있습니까? (0) | 2023.09.07 |
openpyxl을 사용하여 범위의 모든 셀에 테두리 적용 (0) | 2023.09.02 |
gdb: gdb를 종료하지 않고 프로그램을 종료합니다. (0) | 2023.09.02 |
인덱스가 Laravel 마이그레이션에 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.09.02 |