Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Como faço para integrar JSF com Spring Security

Olá, no curso Curso Java e JSF 2 - III: Integração com CDI, na aula 05 ensina como integrar a aplicação com o Spring. Como eu faço para utilizar o Spring Security no mesmo projeto. Eu já fiz o curso "Curso Spring MVC II: Integração, cache, segurança e templates", que explica como usar o Spring Security na aula 04, porém não funcionou para este exemplo. Fiz algumas configurações porém não estou resolvendo este erro. Como faço para configurar o Spring Security neste caso?

GRAVE: Exception starting filter springSecurityFilterChain
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:698)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1175)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1060)
    at org.springframework.web.filter.DelegatingFilterProxy.initDelegate(DelegatingFilterProxy.java:326)
    at org.springframework.web.filter.DelegatingFilterProxy.initFilterBean(DelegatingFilterProxy.java:235)
    at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:199)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:112)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4747)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5389)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1410)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1400)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
4 respostas

Você precisa buscar na documentação do Spring Security como ele deve ser configurado para funcionar só como filtro, isolado do Contexto geral do Spring. Não é algo usual, mas ele tem explicações por lá.

Fiz um post uma vez explicando => https://domineospring.wordpress.com/2015/07/27/spring-security-spring-jpa-e-o-javaee/

No meu caso o Spring é o controlador da Injeção de Dependências do sistema, no seu post não.

É que aí, teoricamente, é mais simples. Basta que você adicione o Spring Security no seu projeto e faça ele proteger os endereços terminados em .xhtml.

solução

Eu fiz isso, mas nenhum botão está funcionando e nenhum erro é exibido no console. Mesmo permitindo tudo (fiz isso apenas para teste):

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/").permitAll()
        .and().formLogin();

Quando ignoro o filtro de segurança a página volta a funcionar.

 @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/disciplina.xhtml");
    }

Para configurar esse projeto, além incluir as bibliotecas do Spring Security, eu criei dois arquivos: SecurityConfiguration.java

SpringSecurityFilterConfiguration.java