Hallo,
ich versuche nun schon seit einigen Tagen einen rememberMe-Login mit JSF 2.1 (MyFaces) und Spring 3 Security hinzubekommen und komme einfach nicht weiter.
Ich habe eine Spring-Bean(Component), die die Login-Daten aufnimmt und die Methode "login()" um den login durchzuführen (in der selben Bean).
Der Login funktioniert an sich auch, nur wird bei einer manuellen Eingabe der URL im Browser zum einen die aktuelle Session nicht erkannt (es wird zur Login Seite weitergeleitet) und zum anderen wird das RememberMe komplett ignoriert, d.h. neustarten des Browsers und erneuter Aufruf der Seite funktioniert ebenfalls nicht (man wird zur Login-Seite weitergeleitet).
Die Bean:
Die return Werte sind die Outcomes der Navigation-Rules (login() wird über CommandButton action aufgerufen).
Meine "spring-security.xml" Spring Security Config:
[XML]
<http auto-config="true">
<intercept-url pattern="/welcome/*" access="ROLE_USER" />
<intercept-url pattern="/login.xhtml" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<form-login login-page="/login.xhtml"/>
<logout invalidate-session="true" delete-cookies="true" logout-success-url="/"/>
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider ref="rememberMeAuthenticationProvider"></authentication-provider>
<authentication-provider>
<user-service id="userDetailsService">
<user name="user" password="user" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
[/XML]
Meine "applicationContext.xml" Spring Security Config:
[XML]
<import resource="spring-security.xml"/>
<context:component-scan base-package="com.test.component" />
<context:annotation-config />
<bean id="rememberMeServices"
class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
<property name="key" value="jsfspring-sec" />
<property name="userDetailsService" ref="userDetailsService" />
<property name="alwaysRemember" value="true" />
<property name="tokenValiditySeconds" value="300" />
</bean>
<bean id="rememberMeAuthenticationProvider"
class="org.springframework.security.authentication.RememberMeAuthenticationProvider">
<property name="key" value="jsfspring-sec"/>
</bean>
<bean id="rememberMeFilter"
class="org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter">
<property name="rememberMeServices" ref="rememberMeServices"/>
<property name="authenticationManager" ref="authenticationManager" />
</bean>
[/XML]
Meine "web.xml" Spring Security Config:
[XML]
<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>
[/XML]
Weiß irgendjemand wo der Fehler liegt?
ich versuche nun schon seit einigen Tagen einen rememberMe-Login mit JSF 2.1 (MyFaces) und Spring 3 Security hinzubekommen und komme einfach nicht weiter.
Ich habe eine Spring-Bean(Component), die die Login-Daten aufnimmt und die Methode "login()" um den login durchzuführen (in der selben Bean).
Der Login funktioniert an sich auch, nur wird bei einer manuellen Eingabe der URL im Browser zum einen die aktuelle Session nicht erkannt (es wird zur Login Seite weitergeleitet) und zum anderen wird das RememberMe komplett ignoriert, d.h. neustarten des Browsers und erneuter Aufruf der Seite funktioniert ebenfalls nicht (man wird zur Login-Seite weitergeleitet).
Die Bean:
Die return Werte sind die Outcomes der Navigation-Rules (login() wird über CommandButton action aufgerufen).
Java:
public String login() {
try {
Authentication result = null;
if (this.rememberMe) {
UserDetails userDetails = userDetailsService.loadUserByUsername(this.name);
RememberMeAuthenticationToken rememberMeAuthenticationToken = new RememberMeAuthenticationToken(
"jsfspring-sec", userDetails,
userDetails.getAuthorities());
HttpServletRequest httpServletRequest = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
rememberMeServices.loginSuccess(httpServletRequest, httpServletResponse, rememberMeAuthenticationToken);
result = rememberMeAuthenticationToken;
} else {
Authentication request = new UsernamePasswordAuthenticationToken(
this.name, this.password);
result = this.autManager.authenticate(request);
}
SecurityContextHolder.getContext().setAuthentication(result);
} catch (AuthenticationException e) {
e.printStackTrace();
return "failed";
}
return "login";
}
Meine "spring-security.xml" Spring Security Config:
[XML]
<http auto-config="true">
<intercept-url pattern="/welcome/*" access="ROLE_USER" />
<intercept-url pattern="/login.xhtml" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<form-login login-page="/login.xhtml"/>
<logout invalidate-session="true" delete-cookies="true" logout-success-url="/"/>
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider ref="rememberMeAuthenticationProvider"></authentication-provider>
<authentication-provider>
<user-service id="userDetailsService">
<user name="user" password="user" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
[/XML]
Meine "applicationContext.xml" Spring Security Config:
[XML]
<import resource="spring-security.xml"/>
<context:component-scan base-package="com.test.component" />
<context:annotation-config />
<bean id="rememberMeServices"
class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
<property name="key" value="jsfspring-sec" />
<property name="userDetailsService" ref="userDetailsService" />
<property name="alwaysRemember" value="true" />
<property name="tokenValiditySeconds" value="300" />
</bean>
<bean id="rememberMeAuthenticationProvider"
class="org.springframework.security.authentication.RememberMeAuthenticationProvider">
<property name="key" value="jsfspring-sec"/>
</bean>
<bean id="rememberMeFilter"
class="org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter">
<property name="rememberMeServices" ref="rememberMeServices"/>
<property name="authenticationManager" ref="authenticationManager" />
</bean>
[/XML]
Meine "web.xml" Spring Security Config:
[XML]
<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>
[/XML]
Weiß irgendjemand wo der Fehler liegt?