5cd3d1dc39e416139b12178536ec2aa6103c0ef6
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / idp / authn / provider / UsernamePasswordLoginHandler.java
1 /*
2  * Copyright [2006] [University Corporation for Advanced Internet Development, Inc.]
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package edu.internet2.middleware.shibboleth.idp.authn.provider;
18
19 import java.io.IOException;
20
21 import javax.servlet.http.HttpServletRequest;
22 import javax.servlet.http.HttpServletResponse;
23
24 import org.apache.log4j.Logger;
25 import org.opensaml.util.URLBuilder;
26
27 /**
28  * Authenticate a username and password against a JAAS source.
29  * 
30  * This authenticaiton handler requires a JSP to collect a username and password from the user. It also requires
31  * a JAAS configuration file to validate the username and password.
32  * 
33  * If an Authentication Context Class or DeclRef URI is not specified, it will default to
34  * "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport".
35  */
36 public class UsernamePasswordLoginHandler extends AbstractLoginHandler {
37
38     /** Class logger. */
39     private final Logger log = Logger.getLogger(UsernamePasswordLoginHandler.class);
40
41     /** The URL of the servlet used to perform authentication. */
42     private String authenticationServletURL;
43
44     /** 
45      * Constructor.
46      *
47      * @param servletURL URL to the authentication servlet
48      */
49     public UsernamePasswordLoginHandler(String servletURL){
50         super();
51         setSupportsPassive(false);
52         setSupportsForceAuthentication(true);
53         authenticationServletURL = servletURL;
54     }
55
56     /** {@inheritDoc} */
57     public void login(final HttpServletRequest httpRequest, final HttpServletResponse httpResponse) {
58         // forward control to the servlet.
59         try {
60             StringBuilder pathBuilder = new StringBuilder();
61             pathBuilder.append(httpRequest.getContextPath());
62             if (!authenticationServletURL.startsWith("/")) {
63                 pathBuilder.append("/");
64             }
65             pathBuilder.append(authenticationServletURL);
66
67             URLBuilder urlBuilder = new URLBuilder();
68             urlBuilder.setScheme(httpRequest.getScheme());
69             urlBuilder.setHost(httpRequest.getLocalName());
70             urlBuilder.setPort(httpRequest.getLocalPort());
71             urlBuilder.setPath(pathBuilder.toString());
72
73             if (log.isDebugEnabled()) {
74                 log.debug("Redirecting to " + urlBuilder.buildURL());
75             }
76
77             httpResponse.sendRedirect(urlBuilder.buildURL());
78             return;
79         } catch (IOException ex) {
80             log.error("Unable to redirect to authentication servlet.", ex);
81         }
82
83     }
84
85     /** {@inheritDoc} */
86     public void logout(final HttpServletRequest request, final HttpServletResponse response, String principal) {
87         return;
88     }
89 }