0

web.xml に springsecurity.taglib.xml を追加するときに、Spring Security と jsf 2.0 を実装するときに問題が発生しました

サーバー: グラスフィッシュ サーバー 3
springframework 3.0.2
jsf 2.0

ライブラリ:
org.springframework.faces.sources 3

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"          xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>HelloWorldExampleWithSpring3MVCInEclipse</display-name>
<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>/WEB-INF/springsecurity.taglib.xml</param-value>
</context-param>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/app-config.xml</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Production</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/app-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
    <welcome-file>faces/index.jsp</welcome-file>
</welcome-file-list>

springsecurity.taglib.xml

<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
 "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib>
<namespace>http://www.springframework.org/security/tags</namespace>
<tag>
    <tag-name>authorize</tag-name>
    <handler-class>org.springframework.faces.security.FaceletsAuthorizeTagHandler</handler-class>
</tag>
<function>
    <function-name>areAllGranted</function-name>
    <function-class>org.springframework.faces.security.FaceletsAuthorizeTagUtils</function-class>
    <function-signature>boolean areAllGranted(java.lang.String)</function-signature>
</function>
<function>
    <function-name>areAnyGranted</function-name>
    <function-class>org.springframework.faces.security.FaceletsAuthorizeTagUtils</function-class>
    <function-signature>boolean areAnyGranted(java.lang.String)</function-signature>
</function>
<function>
    <function-name>areNotGranted</function-name>
    <function-class>org.springframework.faces.security.FaceletsAuthorizeTagUtils</function-class>
    <function-signature>boolean areNotGranted(java.lang.String)</function-signature>
</function>
<function>
    <function-name>isAllowed</function-name>
    <function-class>org.springframework.faces.security.FaceletsAuthorizeTagUtils</function-class>
    <function-signature>boolean isAllowed(java.lang.String, java.lang.String) </function-signature>
</function>
</facelet-taglib>

これはエラーメッセージです

In-place deployment at D:\Project\Secret Project\Hobic Project EE\Yeah\build\web
deploy?path=D:\Project\Secret Project\Hobic Project     EE\Yeah\build\web&name=Yeah&force=true failed on GlassFish Server 3
D:\Project\Secret Project\Hobic Project EE\Yeah\nbproject\build-impl.xml:760: The module has not been deployed.
BUILD FAILED (total time: 1 minute 29 seconds)

サーバー エラー メッセージ

SEVERE: Exception while loading the app
SEVERE: Exception while loading the app : java.lang.IllegalStateException:    ContainerBase.addChild: start: org.apache.catalina.LifecycleException:   java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: 
Source Document:     jar:file:/D:/Project/Secret%20Project/Hobic%20Project%20EE/Zest/build/web/WEB-  INF/lib/org.springframework.faces-2.0.4.RELEASE.jar!/META-INF/faces-config.xml
Cause: Class 'org.springframework.faces.webflow.FlowActionListener' is missing a  runtime dependency: java.lang.NoClassDefFoundError:  org/springframework/webflow/execution/RequestContext

あなたの提案は正しい[java.lang.NoClassDefFoundError: org/springframework/webflow/execution/RequestContext]で、新しいエラーが発生しました:(

SEVERE: Exception while loading the app
SEVERE: Exception while loading the app : java.lang.IllegalStateException:  ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from relative location [security.xml]
Offending resource: ServletContext resource [/WEB-INF/app-config.xml]; nested exception    is org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]
Offending resource: ServletContext resource [/WEB-INF/security.xml]

*解決策 [問題のあるリソース: ServletContext リソース [/WEB-INF/security.xml]] *

![.jar needed][1]

私の問題について提案してもらえますか?thxアグン

4

1 に答える 1

1

私は Netbeans を使っていないので、その詳細はわかりませんが、このエラー メッセージは、何らかのエラー/例外が事前に発生していることを示しているようです。ビルドログには本当に何もありませんか?

とにかく、それが問題を解決し、具体的な問題に関連しているかどうかは<facelet-taglib>わかりませんが、Facelets 2.x がバンドルされている JSF 2.x を使用しているときに、Facelets 1.x に準拠していると宣言されていることがわかりません。 . Netbeans はそれで失敗した可能性があります。

.taglib.xmlfileのルート宣言を次のように修正します。

<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
    version="2.0"
>
    <!-- Config here. -->
</facelet-taglib>

さらに、Glassfish は Servlet 3.0 互換のコンテナーですが、web.xmlルート宣言は Servlet 2.5 に準拠しています。これも技術的にはすぐに問題が発生するわけではありませんが、この方法では Servlet 3.0 / EL 2.2 の利点が失われます。

のルート宣言も修正web.xmlします。

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"
>
    <!-- Config here. -->
</web-app>

更新に従って更新すると、具体的な問題の根本的な原因は次のようになります。

java.lang.NoClassDefFoundError: org/springframework/webflow/execution/RequestContext

これNoClassDefFoundErrorは、メッセージに記載されているクラスがクラスパスにないことを意味しますが、アプリケーションの他のクラスによって (間接的に) 必要とされています。解決策は、クラス (またはこの特定のケースでは、クラスを含む JAR ファイル) をクラスパスに追加することです。上記のクラスはSpring WebFlowの一部です。コア Spring フレームワークと Spring Security で行ったのと同じ方法で、ダウンロードしてクラスパス (IDE が呼び出すビルドパス) に含める必要があります。


2回目の更新による更新2、最初の更新後に新しい問題が発生しました:

XML スキーマ名前空間の Spring NamespaceHandler が見つかりません [http://www.springframework.org/schema/security] 問題のあるリソース: ServletContext リソース [/WEB-INF/security.xml]

私はSpringの人ではないので、頭から答えることはできませんが、Googleは、この問題はSpring Security Config JARファイルの欠落が原因であると示唆しています.

于 2012-05-18T11:16:16.747 に答える