Struts 2 + Tiles + Spring Security 3 アプリケーションで作業していますが、css、画像、スクリプトを読み込めません。これらのリソースはすべて「publish」フォルダーにデプロイされます。これらのいずれもロードしないことを除いて、アプリケーションは正常に動作します。
これが私のSpring Securityのマッピングです。リソースは /static/images や /static/css などの下にあり、jsp ページは /WEB-INF/pages/.. 内にあります。WEB-INF と static は同じ階層にあります。
<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>
これらのフォルダはアクション コールによってレンダリングされないため、struts.xml または tiles.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でデバッグして、他のさまざまなURLを試しましたが、まだ何もありません。
誰かが私に欠けているものを説明できますか? spring 3.0.5.Release バージョンを使用してから、3.0.3.Release バージョンを使用しようとしました。どちらも機能しませんでした。
エラーなし。表示されないだけです。はい、ブラウザのキャッシュをクリアし、別のブラウザでも試しました。
フィードバックの後:: EDIT 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:59,270 DEBUG [DefaultFilterInvocationSecurityMetadataSource.java:200]: 候補は: '/static/images/btn_add.gif'; パターンは /static/** です。一致 = true 2012-09-12 11:39:59,271 DEBUG [AbstractSecurityInterceptor.java:191]: セキュア オブジェクト: FilterInvocation: URL: /static/images/btn_add.gif; 属性: [ROLE_ANONYMOUS, ROLE_ADMIN] 2012-09-12 11:39:59,271 DEBUG [AbstractSecurityInterceptor.java:292]: 以前に認証されました: org.springframework.security.authentication.AnonymousAuthenticationToken@52a05099: プリンシパル: 匿名; 資格情報: [保護]; 認証済み: true; 詳細: org.springframework.security.web.authentication.WebAuthenticationDetails@380f4: RemoteIpAddress: 0:0:0:0:0:0:0:1; セッション ID: 978365092A5784AEBC711B8F588029A3; 認可機関: ROLE_ANONYMOUS 2012-09-12 11:39:59,272 DEBUG [肯定ベース。
http名前空間とは何ですか?<security:http pattern="/static/**" security="none" />
これが私のセキュリティ 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」属性を許可しません。