在jsf项目中使用spring security

时间:2015-01-30 10:39:06

标签: jsf spring-security

我想在我的jsf项目中使用spring security,但使用最少的xml配置。但是当我使用基于annottaion的配置时如下:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication().withUser("user").password("123456").roles("USER");
}

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.authorizeRequests()
        .anyRequest().access("hasRole('ROLE_USER')")
        .and()
            .formLogin()
            .and()
            .httpBasic();

}
}

我收到此错误:

org.springframework.context.ApplicationContextException: Custom context class [com.spring.SecurityConfig] is not of type [org.springframework.web.context.ConfigurableWebApplicationContext]

安全配置类应该实现ConfigurableWebApplicationContext吗?如果是的话怎么做?如果没有解决方案是什么?

根据春季教程,弹簧安全只需要2个类,一个我粘贴在上面,另一个是:

public class SecurityWebApplicationInitializer extends
    AbstractSecurityWebApplicationInitializer {

public SecurityWebApplicationInitializer() {
    super(SecurityConfig.class);
}
}

和我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>OnlineLibrary</display-name>
<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>*.html</url-pattern>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
</welcome-file-list>


<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>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextClass</param-name>
    <param-value>com.spring.SecurityConfig</param-value>
</context-param>
</web-app>

我将这些库用于我的项目: jsf 2.2

弹簧安全3.2.4.RELEASE

以及spring的其他必需库,我在tomcat 7上运行我的项目。 谢谢你的有用答案。

1 个答案:

答案 0 :(得分:0)

可能是,你忘了创建一个你必须定义的新课程:

@EnableWebMvc
@Configuration
@Import({ SecurityConfig.class })
public class AppConfig {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        ...
    }
}

因为您不使用spring mvc,可能此链接可以帮助您: http://laabidi-raissi.blogspot.fr/2013/07/jsf-2-spring-security-integration-with.html 他在applicationContext.xml中对bean进行了定义,但你可能会有一些提示来找到丢失的部分。