当前位置: 首页 > 知识库问答 >
问题:

Struts 2 Tiles Spring Security 3无法加载css、图像和脚本

慕朝明
2023-03-14

我正在开发一个Struts 2 Tile Spring Security 3应用程序,我无法加载任何css、图像和脚本。它们的资源都被删除到“发布”文件夹中。该应用程序运行良好,除了它不加载任何这些。

这是我的 Spring 安全映射。资源位于 /static/images 和 /static/css 等下,jsp 页面位于 /WEB-INF/pages/ ..WEB-INF 和静态位于同一层次结构中。

<property name="securityMetadataSource">
        <security:filter-security-metadata-source>

            <security:intercept-url pattern="/admin/**"
                access="ROLE_ADMIN" />
            <security:intercept-url pattern="**/"
                access="ROLE_ANONYMOUS,ROLE_ADMIN" />                   

        </security:filter-security-metadata-source>
    </property>

两个支柱中都没有对这些文件夹的引用。xml或平铺。xml,因为它们不是通过动作调用呈现的。

Web.xml如下所示:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/classes/app-context.xml
    /WEB-INF/classes/security-context.xml
    </param-value>
</context-param>
<context-param>
    <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
    <param-value>/WEB-INF/classes/tiles/tiles.xml</param-value>
</context-param>

<!-- =======================================================  -->
<!-- FILTER.                                                  -->
<!-- =======================================================  -->
<!--Spring Security filter -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>


<filter>
    <description>struts2</description>
    <display-name>struts2</display-name>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter>
    <description>action2-cleanup</description>
    <display-name>action2-cleanup</display-name>
    <filter-name>action2-cleanup</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>

 <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>action2-cleanup</filter-name>
    <url-pattern>/action2-cleanup</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>action2-cleanup</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- =======================================================  -->
<!-- Listeners                                                -->
<!-- =======================================================  -->
<listener>              
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- <listener>             
    <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>

</listener> -->

<servlet>
<servlet-name>tiles</servlet-name>
<servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class>

<load-on-startup>2</load-on-startup>

我正在尝试通过其中任何一个加载图像,以查看它们是否加载:

<img src="<s:url value='./static/images/btn_add.gif' />"  />
<img src="<s:url value='/static/images/btn_add.gif' />"  />
<img src="../static/images/btn_add.gif"  />
<img src="../../static/images/btn_add.gif" />       

<s:submit action="item_add" type="image"                src="./static/images/btn_add.gif" />

这些都不起作用。我尝试了各种其他网址,从调试与Firebug,仍然没有。

有人可以向我解释我错过了什么吗?我使用了 spring 3.0.5.Release 版本,然后尝试使用 3.0.3.Release 版本。两者都没有用。

没有错误。它就是不显示。是的,我确实清除了浏览器缓存,甚至在不同的浏览器上试了试。

在您的反馈:: 编辑1

嗯(表示踌躇等)..那不是我干的。

我在输出中看到这些:

2012-09-12 11:39:59,268 DEBUG [DefaultFilterInvocationSecurityMetadataSource.java:173] : Converted URL to lowercase, from: '/static/images/btn_add.gif'; to: '/static/images/btn_add.gif'

2012-09-12 11:39:59270调试[DefaultFilterInvocationSecurityMetadataSource.java:200]:候选项为:'/static/images/btn_add。gif';模式为/static/**;matched=true 2012-09-12 11:39:59271调试[AbstractSecurityInterceptor.java:191]:安全对象:FilterInvocation:URL:/static/images/btn_add。gif;属性:[ROLE_ANONYMOUS,ROLE_ADMIN]2012-09-12 11:39:59271 DEBUG[AbstractSecurityInterceptor.java:292]:先前已验证:org.springframework.security.authentication.AnonymousAuthenticationToken@52a05099:委托人:匿名;全权证书:[受保护];已验证:true;细节:org.springframework.security.web.authentication.WebAuthenticationDetails@380f4:远程IP地址:0:0:0:0:0:0:1;会话ID:978365092A5784AEBC711B8F588029A3;授予权限:ROLE_ANONYMOUS 2012-09-12 11:39:59272 DEBUG[基于肯定的java:53]:投票人:org.springframework.security.access.vote.RoleVoter@8efd67,返回:1 2012-09-12 11:39:59272 DEBUG[AbstractSecurityInterceptor.java:213]:授权成功

什么是http命名空间<代码>

这是我的安全 xml 命名空间:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:security="http://www.springframework.org/schema/security"
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.0.xsd">

安全性不允许“http”属性。

共有1个答案

莘聪
2023-03-14

由于您使用的是Spring Security性,因此应该确保静态资产的安全性被禁用

<security:http pattern="/static/**" security="none" />

然后,您应该能够使用正确呈现静态资源

<img src="<s:url value='/static/images/btn_add.gif' />"  />

第一次编辑时的备注:

< code>http不是命名空间,< code>security才是。Web安全服务是使用< code >配置的

正如我们在您的日志中看到的,过滤器已被正确考虑,并且您的图像已被/static/**模式正确匹配,并且已被授予访问权限,因此应该进行渲染。

您可能想在 spring 3.0.x 的 http-intercept 元素上尝试 filters=“none” 属性,因为当我阅读文档时,我不确定 ' 是否对 Spring 3.0.x 有效,但仅适用于 3.1 .

尝试使用(有关详细信息,请参阅此页面):

<http ...>
    <intercept-url pattern="/static/**" filters="none" />
</http>

如果这不起作用,你能使用网络开发工具检查你的浏览器(例如Chrome)加载给定图像的错误是什么吗?404没找到?403未经授权?还有别的吗?

 类似资料:
  • 问题内容: 我有一个隐藏的联系表单,单击该按钮即可进行部署。它的字段设置为CSS背景图像,它们的出现时间总是比已切换的div晚一点。 我在本节中使用了此代码段,但运气不好(清除缓存后): 我正在使用jQuery作为我的库,如果我也可以使用它来解决此问题,那将很酷。 多谢您的光临。 问题答案: 我可以确认我的原始代码似乎有效。我随便坚持使用错误路径的图像。

  • 我的Build.Gradle文件 UPD.这个简单的应用程序可以加载图片从互联网,但它不能加载图片从我的服务器。我的服务器的一些图片加载得很好,但其他的不是。我已经迷路了

  • 问题内容: 我正在开发Spring,Hibernate,JSP应用程序。我正在尝试从我的JSP页面显示图像。图像未显示在浏览器中。我也无法将CSS链接到JSP页面。 我的JSP页面是: 我已经设定 用于我的图像和CSS文件夹 我的Spring Security xml是: 问题答案: 我已通过在文件中添加以下映射解决了该问题 并添加图片src网址。喜欢

  • 问题内容: 我遵守规则 它将URL 重定向到。页面成功重定向,但问题未加载, CSS,js文件位于和下 一种解决方案是使用 绝对路径 (例如/ CSS或/ js而不是CSS /,/ js,但这似乎不是一个可靠的解决方案,因为我们必须在所有文件上进行更改, 是否有其他基于规则的解决方案,这些解决方案独立于编辑所有PHP文件并让我们使用“相对路径”? 问题答案: 不要偷懒,将资源中的相对URI更改为根

  • 问题内容: 我测试了此代码以创建带有图像的对话框。 我将图像文件放入目录中。但是由于某些原因,图像无法显示。你能帮我纠正我的错误吗? 问题答案: 只需替换以下代码: 有了这个 Docu参考。 https://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/Image.html 当您将a传递给该类时,可以用 四种不同的方式 处理( 从do

  • 为了创建带有图像的对话框,我测试了这段代码。 我将图像文件放入目录。但是由于某种原因,图像不显示。你能帮我改正错误吗