我的问题与此类似:
我在具有 Spring 安全性的 Spring MVC 项目中使用 sitemesh。我的 web.xml 看起来像这样:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我的 NavBar.jsp(我正在使用 Spring MVC Bootstrap 展示),包含在 sitemesh 装饰的每个页面中,如下所示:
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<security:authorize ifAnyGranted="ROLE_UPDATE">
<li ><a href="<c:url value="/dataupdate" />">Update</a></li>
</security:authorize>
<security:authorize ifAnyGranted="ROLE_ADMIN">
<li ><a href="<c:url value="/settings" />">Settings</a></li>
</security:authorize>
<li><a href="j_spring_security_logout">Logout</a></li>
</ul>
</div>
一切都按预期工作(即导航栏项目仅在经过身份验证的用户具有正确的角色时才显示),但默认的 Spring Security 登录页面没有被修饰。我可以通过将 web.xml 中的 Sitemesh 过滤器移动到 Spring Security 过滤器上方来解决这个问题,但是 NavBar.jsp 中的安全标签停止工作。
有没有办法让我两者兼得?