ログインしているすべてのユーザーにコンテンツを表示し、ログインしていない場合は非表示にします。jspとspring securityを使用しています。
自作のソリューションは簡単に実行できます。しかし、これを達成する最もクリーンな標準的な方法は何ですか?
Springセキュリティタグには、将来新しい役割を追加できるようにする良い方法がないようです。
私は以下で成功しました:
_ <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以前の場合もあります)は、結果を属性に保存するためのvarパラメーターをサポートしています。それにより、以下をコーディングできます。
<sec:authorize var="loggedIn" access="isAuthenticated()" />
<c:choose>
<c:when test="${loggedIn}">
You are loged in
</c:when>
<c:otherwise>
You are logged out
</c:otherwise>
</c:choose>
次のように、タグ<sec:authorize />
でSpring ELを使用できます。
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<sec:authorize access="isAuthenticated()">
YES, you are logged in!
</sec:authorize>
これはどう? -Spring 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()