TemplateAuthenticationSuccessHandler.java
package cn.home1.oss.lib.security.internal.template;
import static cn.home1.oss.lib.security.api.GenericUser.GENERIC_USER_COOKIE;
import static cn.home1.oss.lib.security.api.GenericUser.GENERIC_USER_TOKEN;
import static cn.home1.oss.lib.security.api.Security.HEADER_AUTH_TOKEN;
import static cn.home1.oss.lib.security.internal.template.SmartRedirectStrategy.PARAM_REDIRECT;
import cn.home1.oss.lib.security.api.GenericUser;
import cn.home1.oss.lib.webmvc.api.TypeSafeCookie;
import cn.home1.oss.lib.webmvc.api.TypeSafeToken;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.savedrequest.NullRequestCache;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by zhanghaolun on 16/8/23.
*/
public class TemplateAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
@Qualifier(GENERIC_USER_COOKIE)
@Autowired(required = false)
@Setter
private TypeSafeCookie<GenericUser> cookie;
@Qualifier(GENERIC_USER_TOKEN)
@Autowired(required = false)
@Setter
private TypeSafeToken<GenericUser> token;
public TemplateAuthenticationSuccessHandler(final String defaultTargetUrl) {
super();
this.setDefaultTargetUrl(defaultTargetUrl);
}
@Override
public void onAuthenticationSuccess( //
final HttpServletRequest request, //
final HttpServletResponse response, //
final Authentication authentication //
) throws ServletException, IOException { //
final GenericUser user = GenericUser.fromPrincipal(authentication);
user.eraseCredentials();
if (this.cookie != null) {
this.cookie.setCookie(request, response, user);
}
if (this.token != null) {
final String token = this.token.toToken(user);
response.setHeader(HEADER_AUTH_TOKEN, token);
}
super.onAuthenticationSuccess(request, response, authentication);
}
public static TemplateAuthenticationSuccessHandler templateSuccessHandler(final String defaultTargetUrl) {
final TemplateAuthenticationSuccessHandler handler = new TemplateAuthenticationSuccessHandler(defaultTargetUrl);
handler.setAlwaysUseDefaultTargetUrl(false);
handler.setRequestCache(new NullRequestCache()); // stateless application does not use request cache
handler.setTargetUrlParameter(PARAM_REDIRECT);
handler.setUseReferer(false);
return handler;
}
}