Spring Security、Sitemesh 和 Taglibs

Posted

技术标签:

【中文标题】Spring Security、Sitemesh 和 Taglibs【英文标题】:Spring Security, Sitemesh & Taglibs 【发布时间】:2013-11-15 12:35:22 【问题描述】:

我的问题和这个类似:

Spring security tags in sitemesh decorator

我在具有 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 中的安全标签停止工作。

有没有办法让我两者兼得?

【问题讨论】:

【参考方案1】:

为了解决这个问题,我实现了一个自定义 login.jsp 页面,并且 sitemesh 刚刚选择了它。

【讨论】:

【参考方案2】:

请更改过滤器的顺序并尝试..它应该可以工作

【讨论】:

以上是关于Spring Security、Sitemesh 和 Taglibs的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 应用程序中的 Sitemesh 未装饰自定义错误页面

spring security 3.1 isAuthenticated() 不工作

spring boot 集成 sitemesh

如何在sitemesh装饰器中获取模型属性或spring的bean?

Spring Session 不适用于 Sitemesh

如何将 Sitemesh 3 与 Spring MVC 3 集成?