/* Copyright 2006-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.codehaus.groovy.grails.plugins.springsecurity
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import org.springframework.beans.factory.FactoryBean
import org.springframework.beans.factory.InitializingBean
import org.springframework.beans.factory.annotation.Required
import org.springframework.security.ui.logout.LogoutFilter
import org.springframework.security.ui.logout.LogoutHandler
/**
* Configures a {@link LogoutFilter} given a list of {@link LogoutHandler}s.
*
* @author Burt Beckwith
*/
class LogoutFilterFactoryBean implements FactoryBean, InitializingBean {
private List _handlers
private LogoutFilter _logoutFilter
private String _logoutSuccessUrl
/**
* {@inheritDoc}
* @see org.springframework.beans.factory.FactoryBean#getObject()
*/
LogoutFilter getObject() {
return _logoutFilter
}
/**
* {@inheritDoc}
* @see org.springframework.beans.factory.FactoryBean#getObjectType()
*/
Class getObjectType() {
return LogoutFilter
}
/**
* {@inheritDoc}
* @see org.springframework.beans.factory.FactoryBean#isSingleton()
*/
boolean isSingleton() {
return true
}
/**
* {@inheritDoc}
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
void afterPropertiesSet() {
_logoutFilter = new FixRedirectLogoutFilter(_logoutSuccessUrl, _handlers as LogoutHandler[])
}
/**
* Dependency injection for the logout success url.
* @param logoutSuccessUrl the url
*/
@Required
void setLogoutSuccessUrl(String logoutSuccessUrl) {
_logoutSuccessUrl = logoutSuccessUrl
}
/**
* Dependency injection for the handlers.
* @param handlers the handlers
*/
@Required
void setHandlers(List handlers) {
_handlers = handlers
}
}
/**
* Overrides the default redirect behavior to use {@link RedirectUtils#sendRedirect(HttpServletRequest, HttpServletResponse, String)}.
*/
class FixRedirectLogoutFilter extends LogoutFilter {
FixRedirectLogoutFilter(String logoutSuccessUrl, LogoutHandler[] handlers) {
super(logoutSuccessUrl, handlers)
}
/**
* {@inheritDoc}
* @see org.springframework.security.ui.logout.LogoutFilter#sendRedirect(
* javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String)
*/
@Override
protected void sendRedirect(
HttpServletRequest request,
HttpServletResponse response,
String url) throws IOException {
RedirectUtils.sendRedirect(request, response, url)
}
}