2013-03-26 82 views
0

我有项目通过Spring的安全保护。我需要确定用户,谁刚刚访问到JSP是否已经登录我在这里读了一些文章,帖子和文档,并试图用这个代码来实现它。的再认识在春季3项目登录用户JSP

<sec:authorize ifAnyGranted="ROLE_ANONYMOUS"> 
      USER NOT LOGGED IN 
    <td><a href="<c:url value="/login"/>">Login</a></td> 
</sec:authorize> 
<sec:authorize ifNotGranted="ROLE_ANONYMOUS">  
      USER LOGGED IN 
    <td><a href="<c:url value="/j_spring_security_logout"/>">Logout</a></td> 
</sec:authorize> 

不过,我总是得到“用户登录”我不能明白为什么。这是我的安全上下文

<beans xmlns:security="http://www.springframework.org/schema/security" 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/security 
      http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

<security:http pattern="/resources/**" security="none"/> 
<security:http pattern="/login*" security="none" auto-config="true"/> 
<security:http pattern="/denied" security="none"/> 

<security:http auto-config="true" access-denied-page="/denied" servlet-api-provision="false"> 
    <security:intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY"/> 
    <security:intercept-url pattern="/edit/**" access="ROLE_EDIT"/> 
    <security:intercept-url pattern="/admin/**" access="ROLE_ADMIN"/> 
    <security:intercept-url pattern="/**" access="ROLE_USER"/> 
    <security:form-login login-page="/login" authentication-failure-url="/denied" 
         default-target-url="/"/> 
    <security:logout logout-success-url="/login" /> 
</security:http> 

<security:authentication-manager> 
    <security:authentication-provider> 
     <security:user-service> 
      <security:user name="adam" password="adampassword" authorities="ROLE_USER"/> 
      <security:user name="jane" password="janepassword" authorities="ROLE_USER, ROLE_ADMIN"/> 
      <security:user name="sue" password="suepassword" authorities="ROLE_USER, ROLE_EDIT"/> 
     </security:user-service> 
    </security:authentication-provider> 
</security:authentication-manager> 

</beans> 

我想感谢所有帮助:)

+0

如果您检查ROLE_USER而不是ROLE_ANONYMOUS会发生什么? – Luciano 2013-03-26 13:04:28

+0

仍然是相同的: - /我只得到登录消息USER:-S这是相当混乱... – Dworza 2013-03-26 13:10:19

回答

2

如果页面入店给任何人,在你的secruity设置上下文中,您可以有条件地显示如下内容:

<sec:authorize var="loggedIn" access="isAuthenticated()"/> 

,并使用相当标准的JSTL则可以:

<c:choose> 
    <c:when test="${loggedIn}"> 
    <td><a href="<c:url value="/j_spring_security_logout"/>">Logout</a></td>   

谷歌搜索一点点告诉我ifnotgranted is deprecated

+0

不过这是行不通的,以及: - /我已经尝试过这一点,所以可能有问题其他地方 – Dworza 2013-03-26 15:50:18

+0

@Dworza你会得到什么错误,日志说什么?你需要enbale安全标签 – NimChimpsky 2013-03-26 16:22:42

+0

我已经启用了它们......实际上它没有错误......它似乎正在正常工作。尽管如此,似乎总是用户登录,即使他没有登录 – Dworza 2013-03-26 17:55:59