RestfulBasicAuthenticationEntryPoint.java
package cn.home1.oss.lib.security.internal.rest;
import static org.apache.commons.lang3.StringUtils.isBlank;
import cn.home1.oss.lib.errorhandle.internal.RestfulExceptionHandler;
import lombok.Getter;
import lombok.NonNull;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by zhanghaolun on 16/6/28.
*/
public class RestfulBasicAuthenticationEntryPoint implements AuthenticationEntryPoint, InitializingBean {
public static final String DEFAULT_REALM_NAME = "DefaultRealmName";
@Getter
private String realmName;
@Autowired
@NonNull
private RestfulExceptionHandler exceptionHandler;
@Override
public void commence( //
final HttpServletRequest request, //
final HttpServletResponse response, //
final AuthenticationException authException //
) throws IOException, ServletException {
response.addHeader("WWW-Authenticate", "Basic realm=\"" + this.realmName + "\"");
// response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
// response.getWriter().println("HTTP Status 401 - " + authException.getMessage());
this.exceptionHandler.resolveAndHandle(request, response, authException);
}
@Override
public void afterPropertiesSet() throws Exception {
if (isBlank(this.getRealmName())) {
this.setRealmName(DEFAULT_REALM_NAME);
}
// Assert.hasText(this.realmName, "realmName must be specified");
}
public void setRealmName(final String realmName) {
this.realmName = realmName;
}
public void setExceptionHandler(final RestfulExceptionHandler exceptionHandler) {
this.exceptionHandler = exceptionHandler;
}
}