package org.javaee7.jaspic.statuscodes.sam; import static javax.security.auth.message.AuthStatus.SEND_FAILURE; import static javax.security.auth.message.AuthStatus.SEND_SUCCESS; import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import java.io.IOException; import java.util.Map; import javax.security.auth.Subject; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.message.AuthException; import javax.security.auth.message.AuthStatus; import javax.security.auth.message.MessageInfo; import javax.security.auth.message.MessagePolicy; import javax.security.auth.message.module.ServerAuthModule; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Very basic SAM that just sets an HTTP status code into the response and then returns SEND_FAILURE. * <code>doLogin</code> is present. * * @author Arjan Tijms * */ public class TestServerAuthModule implements ServerAuthModule { private Class<?>[] supportedMessageTypes = new Class[] { HttpServletRequest.class, HttpServletResponse.class }; @Override public void initialize(MessagePolicy requestPolicy, MessagePolicy responsePolicy, CallbackHandler handler, @SuppressWarnings("rawtypes") Map options) throws AuthException { } @Override public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) throws AuthException { HttpServletResponse response = (HttpServletResponse) messageInfo.getResponseMessage(); try { response.sendError(SC_NOT_FOUND); return SEND_FAILURE; } catch (IOException e) { throw (AuthException) new AuthException().initCause(e); } } @Override public Class<?>[] getSupportedMessageTypes() { return supportedMessageTypes; } @Override public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject) throws AuthException { return SEND_SUCCESS; } @Override public void cleanSubject(MessageInfo messageInfo, Subject subject) throws AuthException { } }