Following all previous steps we always configured JSF and Spring. In case we use third party library like Primefaces you will have to configure resources required by Primefaces manually in Spring Security xml.
Extending example at if we had Primefaces lib in our project we will have to add below configuration to jsfspring-sec-security-config.xml
<sec:intercept-url pattern="/javax.faces.resource/**" access="permitAll"/>
The resultant code will look like below:
jsfspring-sec-security-config.xml
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <sec:http auto-config="true" use-expressions="true"> <sec:intercept-url pattern="/pages/secure/**" access="hasRole('ROLE_USER')" /> <sec:intercept-url pattern="/pages/unsecure/**" access="permitAll"/> <sec:intercept-url pattern="/pages/common/**" access="permitAll"/> <sec:intercept-url pattern="/javax.faces.resource/**" access="permitAll"/> <sec:intercept-url pattern="/**" access="permitAll"/> <sec:form-login login-page="/pages/common/login.jsf"/> <sec:logout invalidate-session="true" delete-cookies="JSESSIONID,SPRING_SECURITY_REMEMBER_ME_COOKIE" logout-success-url="/pages/common/login.jsf"></sec:logout> </sec:http> <sec:authentication-manager alias="authenticationManager"> <sec:authentication-provider ref="ldapAuthProvider"></sec:authentication-provider> </sec:authentication-manager> <beans:bean id="ldapContextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> <beans:constructor-arg value="ldap://localhost:12389/o=mycompany"/> <beans:property name="userDn" value="uid=admin,ou=system"/> <beans:property name="password" value="secret"/> </beans:bean> <beans:bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> <beans:constructor-arg> <beans:bean class="org.springframework.security.ldap.authentication.BindAuthenticator"> <beans:constructor-arg ref="ldapContextSource"/> <beans:property name="userDnPatterns"> <beans:list> <beans:value>uid={0},ou=Users</beans:value> </beans:list> </beans:property> </beans:bean> </beans:constructor-arg> <beans:constructor-arg> <beans:bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator"> <beans:constructor-arg ref="ldapContextSource"/> <beans:constructor-arg value="ou=Groups"/> <beans:property name="groupRoleAttribute" value="cn"/> </beans:bean> </beans:constructor-arg> </beans:bean> <sec:global-method-security pre-post-annotations="enabled"/> </beans:beans>
No other configuration change is required to make Primefaces work with Spring Security
Thanks buddy, It worked for me