Spring安全登录/注销url相关问题

时间:2011-02-04 09:14:40

标签: spring-mvc spring-security

我正在为我的应用程序使用spring security。以下是我的applicationContext-Security.xml中的一些行,用于为/ offers和/ add链接设置ROLE_USER访问,并且没有/ list链接的过滤器。

<intercept-url pattern="/list*" filters="none" />
<intercept-url pattern="/offers**" access="ROLE_USER" />
<intercept-url pattern="/add/**" access="ROLE_USER" />

我想在用户未登录时显示 LOGIN 链接,当用户登录系统时,此链接应替换为 LOGOUT 。 为此,我尝试在jsp页面中使用代码。

<security:authorize ifNotGranted="ROLE_USER">  
  <a href="login.jsp">Login</a>
</security:authorize>

<security:authorize ifAnyGranted="ROLE_USER">
  Welcome <security:authentication property="principal.username"/>! &nbsp; 
| <a href="logout.htm">Logout</a>     
</security:authorize>

当我在/ list链接时,它显示“登录”链接。 登录后,如果用户重定向到/ offers或/ add链接,则显示“Welcome UserName | LOGOUT”,按照要求运行。但问题是,当用户登录并重定向到/ list页面时,它也显示“LOGIN”(USER已登录)它应显示“Welcome UserName | LOGOUT”

在这种情况下帮助我,我该怎么做才能让它正常工作? 提前谢谢。

1 个答案:

答案 0 :(得分:4)

我找到了解决方案,可能对寻找相同问题的其他人有用。 从安全XML文件中删除下面的行。

<intercept-url pattern="/list*" filters="none" />

代码将起作用。这是因为,当您为某个链接指定filters =“none”时,您的上下文不会向您的jsp页面返回授予的权限。因此,当我们在登录后重定向到列表页面时,授权标记表示它未被授权为ROLE_USER并执行以下行,

<security:authorize ifNotGranted="ROLE_USER">  
  <a href="login.jsp">Login</a>
</security:authorize>

所以只需从该链接中删除过滤器。