programing

Spring 보안으로 로그인한 사용자에게 조건부로 jsp 컨텐츠를 보여주는 방법

javamemo 2023. 9. 7. 21:25
반응형

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

반응형