Spring Security taglibs e JSF

Bom dia Gujeiros

Estou com um problema na minha aplicação JSF
Não estou conseguindo fazer o uso das taglibs do spring-security dentro do jsf

Ja add os jars necessários mas nada funciona…

coloquei o xmlns:sec="http://www.springframework.org/security/tags"
ele reconhece as tags, mas elas não funcionam.

Alguém já chegou a utilizar as libs no JSF?

Aqui na empresa temos um projeto em VRaptor e usamos as taglibs do spring-security de boa, mas já no JSF não funciona nem a pal…

Qualquer ajuda já agradeço xD

Boa tarde.

Cara, os .jars do SpringSecurity estão no classpath da aplicação(no servidor)?

Meu security.xml tá assim e funfa corretamente:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
   xmlns="http://www.springframework.org/schema/security"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:beans="http://www.springframework.org/schema/beans"
   xmlns:jdbc="http://www.springframework.org/schema/jdbc"
   xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/jdbc
      http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
      http://www.springframework.org/schema/security
      http://www.springframework.org/schema/security/spring-security-3.0.xsd"
>

   <http use-expressions="true" entry-point-ref="forbiddenAuthEntryPoint">
      <intercept-url pattern="/**" access="permitAll" requires-channel="https"/>
      <x509 subject-principal-regex=":(\d*?),"/>
      <port-mappings>
         <port-mapping http="8080" https="8443"/>
      </port-mappings>
   </http>

   <authentication-manager alias="authenticationManager">
      <authentication-provider user-service-ref='userDetailsService'/>
   </authentication-manager>

</beans:beans>

[]'s
t++

Cara aqui esta meu appContext-Security e não esta muito diferente do seu…

Quais os passos que você deu para implementar as tags?
e os jars estão sim no classpath da app

[code]<?xml version="1.0" encoding="UTF-8"?>

<sec:http auto-config="true" use-expressions="true">
	
	<sec:form-login login-page="/home.cm"
		authentication-failure-url="/home.cm?login_error=1" default-target-url="/home.cm" 
		authentication-success-handler-ref="forwardFilter"/>
	<sec:logout logout-success-url="http://localhost:8080/PortalCM" logout-url="/j_spring_security_logout" />
		
</sec:http>

<sec:authentication-manager alias="authenticationManager">
	<sec:authentication-provider user-service-ref="usuarioService">
		<sec:password-encoder hash="md5" />
	</sec:authentication-provider>
</sec:authentication-manager>

<bean id="forwardFilter" class="br.com.portal.filter.FowardingFilter">
	<property name="revendaViewService" ref="revendaViewService"></property>
	<property name="usuarioService" ref="usuarioService" ></property>
</bean>
[/code]

Bom dia Quindin…

Vc tinha dito q esta com problema nas tags do SpringSecurity mas qual é msg de erro msm?

Ñ entendi a pergunta:

Desculpe-me a demora nas respostas, tô meio enrolado esses dias… :lol:
[]'s
t++

Cara seguinte:

Não dá nenhuma menssagem de erro.
Simplesmente é como se as tag não existissem kkk

se eu colocar [code]<sec:authorize acess="hasRole(‘ROLE_QUALQUERCOISA’)>

So exibe se tiver a role citada acima

[/code] vai dar na mesma coisa que eu solocar somente [code]

So exibe se tiver a role citada acima

[/code]

é como se ele não reconhecesse ou algo do tipo

Boa tarde Quindin.

No teu web.xml vc configurou corretamente os filtros do SpringSecurity?
O seu security.xml está corretamente referenciando no web.xml?

Vc tem algo parecido com:

<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
         /WEB-INF/base.xml
         /WEB-INF/security.xml
   </param-value>
</context-param>
<listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
   <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<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>
   <dispatcher>FORWARD</dispatcher>
   <dispatcher>REQUEST</dispatcher>
</filter-mapping>

[]'s
t++

a única diferença do web.xml é essa:

<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext*.xml </param-value> </context-param>

onde eu tenho os arquivos

applicationContext-security.xml
applicationContext.xml
applicationContext-cfx.xml
applicationContext-services.xml

E ai Quindin, resolveu?

Señ, teste o seguinte código no teu security.xml para testar:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:sec="http://www.springframework.org/schema/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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">
   <sec:http auto-config="true" use-expressions="true">
      <sec:intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
   </sec:http>
   <sec:authentication-manager alias="authenticationManager">
      <sec:authentication-provider>
         <sec:user-service>
            <sec:user authorities="ROLE_USER" name="guest" password="guest" />
         </sec:user-service>
      </sec:authentication-provider>
   </sec:authentication-manager>
</beans>

Aq testei e funcionou, se vc ñ conseguir logar com o usário: guest e senha:guest certamente vc tem algum problema no seu redirecionamento ("/home.cm") ou na própria página de login.

Como vc ñ tem acesso a página de login personalizada provavelmente o problema ñ será em teu bean autenticador “usuarioService” ou no teu forwardFilter.

Posta ai o web.xml para vermos se ainda tiver problema.

Boa sorte.
[]'s
t++

aqui os trexos do web.xml que configuro o spring e o security

[code]
contextConfigLocation

/WEB-INF/applicationContext*.xml

Listener responsável por iniciar o container do Spring org.springframework.web.context.ContextLoaderListener Listener necessário para a definição de beans em escopos como request e session através do Spring org.springframework.web.context.request.RequestContextListener OpenEntityManagerInViewFilter org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter OpenEntityManagerInViewFilter /* springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain /* FORWARD REQUEST [/code]

e sim o spring security esta funcionando, o que não funciona são as taglibs…
Ja tentei tambem criando um xml de configuração das tags e declarando o xml no web.xml

<context-param> <param-name>javax.faces.FACELETS_LIBRARIES</param-name> <param-value>/WEB-INF/springsecurity.taglib.xml</param-value> </context-param> Mas tambem não deu nada

E ai galera beleza?

Alguém pode me indicar um livro ou um site que expliquem o funcionamento do spring do zero mesmo?

Eu tentei usar o spring e o spring security mas não estou entendo o significado das tags, então queria algo que explicasse a base para que eu possa andar sozinho.

valeu.

Eae quindin, conseguiu cara?

estou com o mesmo problema só que quando adiciono :

        <context-param>  
            <param-name>javax.faces.FACELETS_LIBRARIES</param-name>  
            <param-value>/WEB-INF/springsecurity.taglib.xml</param-value>  
        </context-param>  

Meu projeto da erro no deployment, não faço nem ideia ao que se refere esse erro…

segue meus xmls:


//applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<b:beans xmlns="http://www.springframework.org/schema/security"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:b="http://www.springframework.org/schema/beans"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/security
                            http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <http auto-config="true" use-expressions="true">
        <intercept-url pattern="/index.jsf" access="hasRole('ROLE_USER')"/>
        <form-login login-page="/login.jsf" authentication-failure-url="/login.jsf?erro=true"/>
    </http>
    
    <authentication-manager>
        <authentication-provider>
            <jdbc-user-service data-source-ref="dataSource"
               users-by-username-query="SELECT username, password, enable FROM usuario WHERE username=?"
               authorities-by-username-query="SELECT Usuario_username as username, autorizacoes_nome as authority FROM usuario_autorizacao WHERE Usuario_username=?"
            />
        </authentication-provider>
    </authentication-manager>

    <b:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
        <b:property name="url" value="jdbc:postgresql://localhost:5432/Usuario" />
        <b:property name="driverClassName" value="org.postgresql.Driver" />
        <b:property name="username" value="postgres" />
        <b:property name="password" value="123456" />
    </b:bean>

</b:beans>

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

//web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd"> 
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <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>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <context-param>
        <param-name>primefaces.skin</param-name>
        <param-value>none</param-value>
    </context-param>

    <!-- Início das configurações para o Spring Security 3 -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!-- Fim das configuração para utilizar o Spring Security 3 -->

</web-app>

da esse erro:
/composicao.xhtml @12,85 rendered="#{sec:areAnyGranted(‘ROLE_ADMIN’)}" Function ‘sec:areAnyGranted’ not found

Me da uma luz ae pq ta foda, ja to a mais de semana em cima desse problema e nada!

Abraço

Estou aprendendo a usar o spring security agora e não estou conseguindo fazer funcionar a taglib de forma alguma.

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                template="./../newTemplate.xhtml"
                xmlns:sec="http://www.springframework.org/security/tags">


    <ui:define name="content">
        <p>Qualquer um vê essa frase</p>
        <sec:authorize ifAllGranted="ROLE_ADM">
            <p>Somente ADM vê essa frase</p>
        </sec:authorize>
        
    </ui:define>

</ui:composition>

Não faz a minima diferenca eu colocar a tag do spring. :cry:

Alguem aí já usou essa taglib?

Pessoal, acredito que já devem ter resolvido o problema. Mas só pra deixar a configuração para quem precisar, eu consegui resolver seguindo o link:
http://dominikdorn.com/facelets/

Adicione estes JARs: (facelets-taglib-0.3_jsf-2.0_spring-3.jar e taglib-core-0.4.jar) na pasta lib do seu projeto.
Fiz isso e deu certo.