@ -25,6 +25,7 @@ class LogoutBeanDefinitionParser implements BeanDefinitionParser {
@@ -25,6 +25,7 @@ class LogoutBeanDefinitionParser implements BeanDefinitionParser {
static final String ATT_LOGOUT_URL = "logout-url" ;
static final String DEF_LOGOUT_URL = "/j_spring_security_logout" ;
static final String ATT_LOGOUT_HANDLER = "success-handler-ref" ;
String rememberMeServices ;
@ -33,20 +34,22 @@ class LogoutBeanDefinitionParser implements BeanDefinitionParser {
@@ -33,20 +34,22 @@ class LogoutBeanDefinitionParser implements BeanDefinitionParser {
}
@SuppressWarnings ( "unchecked" )
public BeanDefinition parse ( Element element , ParserContext parserContext ) {
public BeanDefinition parse ( Element element , ParserContext pc ) {
String logoutUrl = null ;
String successHandlerRef = null ;
String logoutSuccessUrl = null ;
String invalidateSession = null ;
BeanDefinitionBuilder builder = BeanDefinitionBuilder . rootBeanDefinition ( LogoutFilter . class ) ;
if ( element ! = null ) {
Object source = parserContext . extractSource ( element ) ;
Object source = pc . extractSource ( element ) ;
builder . getRawBeanDefinition ( ) . setSource ( source ) ;
logoutUrl = element . getAttribute ( ATT_LOGOUT_URL ) ;
WebConfigUtils . validateHttpRedirect ( logoutUrl , parserContext , source ) ;
successHandlerRef = element . getAttribute ( ATT_LOGOUT_HANDLER ) ;
WebConfigUtils . validateHttpRedirect ( logoutUrl , pc , source ) ;
logoutSuccessUrl = element . getAttribute ( ATT_LOGOUT_SUCCESS_URL ) ;
WebConfigUtils . validateHttpRedirect ( logoutSuccessUrl , parserContext , source ) ;
WebConfigUtils . validateHttpRedirect ( logoutSuccessUrl , pc , source ) ;
invalidateSession = element . getAttribute ( ATT_INVALIDATE_SESSION ) ;
}
@ -55,10 +58,19 @@ class LogoutBeanDefinitionParser implements BeanDefinitionParser {
@@ -55,10 +58,19 @@ class LogoutBeanDefinitionParser implements BeanDefinitionParser {
}
builder . addPropertyValue ( "filterProcessesUrl" , logoutUrl ) ;
if ( ! StringUtils . hasText ( logoutSuccessUrl ) ) {
logoutSuccessUrl = DEF_LOGOUT_SUCCESS_URL ;
if ( StringUtils . hasText ( successHandlerRef ) ) {
if ( StringUtils . hasText ( logoutSuccessUrl ) ) {
pc . getReaderContext ( ) . error ( "Use " + ATT_LOGOUT_URL + " or " + ATT_LOGOUT_HANDLER + ", but not both" ,
pc . extractSource ( element ) ) ;
}
builder . addConstructorArgReference ( successHandlerRef ) ;
} else {
// Use the logout URL if no handler set
if ( ! StringUtils . hasText ( logoutSuccessUrl ) ) {
logoutSuccessUrl = DEF_LOGOUT_SUCCESS_URL ;
}
builder . addConstructorArgValue ( logoutSuccessUrl ) ;
}
builder . addConstructorArgValue ( logoutSuccessUrl ) ;
if ( ! StringUtils . hasText ( invalidateSession ) ) {
invalidateSession = DEF_INVALIDATE_SESSION ;