2011-06-02 107 views
2

我在JSF 1.2项目中实现了spring security。在JBoss 5.0.1中成功部署,但当我尝试访问我的应用程序的登录页面时,出现以下例外情况JSF1.2和Spring Security集成中的问题

Caused by: java.lang.IllegalArgumentException: FacesContext must not be null 
at org.springframework.util.Assert.notNull(Assert.java:112) 
at org.springframework.web.jsf.FacesContextUtils.getWebApplicationContext(FacesContextUtils.java:50) 
at org.springframework.web.jsf.FacesContextUtils.getRequiredWebApplicationContext(FacesContextUtils.java:81) 
at org.springframework.web.jsf.el.SpringBeanFacesELResolver.getWebApplicationContext(SpringBeanFacesELResolver.java:91) 
at org.springframework.web.jsf.el.SpringBeanFacesELResolver.getBeanFactory(SpringBeanFacesELResolver.java:79) 
at org.springframework.beans.factory.access.el.SpringBeanELResolver.getValue(SpringBeanELResolver.java:50) 
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) 

从这个跟踪我猜测,一些如何弹簧豆尝试使用面临上下文之前它初始化。

以下是我的项目结构:

MyEar 
|-- lib\ (contains all spring security jar files) 
| 
| 
|-- myWar 
     |-- META-INF/MANIFEST.MF (entries for spring security jars) 
     | 
     |-- WEB-INF 
       |-- applicationContext.xml 
       |-- lib\ (local jar files jsf,facelets etc) 

这里有一件事是重要的一提的是,我想在耳边的lib目录中的所有我的春天证券罐子,当我把我所有的春天证券这个异常是不会发生直接在耳朵下的罐子(earcontent)不在lib中。

请建议我这是否与我的其他项目的结构有关的问题?

UPDATE:这里是我的清单内容:

Manifest-Version: 1.0 
    Class-Path: lib/aopalliance-1.0.jar 
    lib/mysql-connector-java-5.1.7-bin.jar 
    lib/org.springframework.aop-3.0.5.RELEASE.jar 
    lib/org.springframework.asm-3.0.5.RELEASE.jar 
    lib/org.springframework.beans-3.0.5.RELEASE.jar 
    lib/org.springframework.context-3.0.5.RELEASE.jar 
    lib/org.springframework.core-3.0.5.RELEASE.jar 
    lib/org.springframework.expression-3.0.5.RELEASE.jar 
    lib/org.springframework.transaction-3.0.5.RELEASE.jar 
    lib/org.springframework.web-3.0.5.RELEASE.jar 
    lib/spring-security-config-3.0.5.RELEASE.jar 
    lib/spring-security-core-3.0.5.RELEASE.jar 
    lib/spring-security-taglibs-3.0.5.RELEASE.jar 
    lib/spring-security-web-3.0.5.RELEASE.jar 

这里是web.xml中的条目的某些部分:

 <!-- Delegating to a Spring-managed bean that implements the Filter interface --> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    <init-param> 
     <param-name>targetBean</param-name> 
     <param-value>filterChainProxy</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 

    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 
+0

你可以发布你的'MyEar/myWar/META-INF/MANIFEST.MF'? – gpeche 2011-06-02 13:23:24

+0

我已经更新了清单内容 – PushkarT 2011-06-03 04:59:33

回答

2

FacesContextFacesServlet创建。所以当它是null时,这意味着你没有调用FacesServlet。您需要确保浏览器请求的URL与您在web.xml中定义的FacesServlet<url-pattern>相匹配。

如果是例如

<url-pattern>*.jsf</url-pattern> 

,那么你需要确保你调用的登录页面,

http://localhost:8080/myWar/login.jsf

,因此作为

http://localhost:8080/myWar/login.xhtml

+0

yes balusC我也是这么想的,我的web.xml中有类似的条目,你可以在我的问题文章的更新部分看到。我的浏览器调用http:// localhost :仅限8080/myWar/security/login.jsf。 – PushkarT 2011-06-03 05:02:31

+0

嘿@BalusC任何评论我已经更新了这个问题,更多的信息 – PushkarT 2011-06-05 17:21:10

+0

嗯,这似乎是一个更具体的Spring问题,比JSF特定的问题。对不起,我不熟悉春天。 – BalusC 2011-06-05 18:09:09