View Javadoc
1   package org.argeo.cms.auth;
2   
3   import java.io.IOException;
4   
5   import javax.security.auth.callback.Callback;
6   import javax.security.auth.callback.CallbackHandler;
7   import javax.security.auth.callback.LanguageCallback;
8   import javax.security.auth.callback.UnsupportedCallbackException;
9   import javax.servlet.http.HttpServletRequest;
10  import javax.servlet.http.HttpServletResponse;
11  import javax.servlet.http.HttpSession;
12  
13  /**
14   * Callback handler populating {@link HttpRequestCallback}s with the provided
15   * {@link HttpServletRequest}, and ignoring any other callback.
16   */
17  public class HttpRequestCallbackHandler implements CallbackHandler {
18  	final private HttpServletRequest request;
19  	final private HttpServletResponse response;
20  	final private HttpSession httpSession;
21  
22  	public HttpRequestCallbackHandler(HttpServletRequest request, HttpServletResponse response) {
23  		this.request = request;
24  		this.httpSession = request.getSession(false);
25  		this.response = response;
26  	}
27  
28  	public HttpRequestCallbackHandler(HttpSession httpSession) {
29  		this.httpSession = httpSession;
30  		this.request = null;
31  		this.response = null;
32  	}
33  
34  	@Override
35  	public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
36  		for (Callback callback : callbacks)
37  			if (callback instanceof HttpRequestCallback) {
38  				((HttpRequestCallback) callback).setRequest(request);
39  				((HttpRequestCallback) callback).setResponse(response);
40  				((HttpRequestCallback) callback).setHttpSession(httpSession);
41  			} else if (callback instanceof LanguageCallback) {
42  				((LanguageCallback) callback).setLocale(request.getLocale());
43  			}
44  	}
45  
46  }