001 //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.4_testing/src/org/deegree/enterprise/control/ajax/RequestUser.java $
002 /*---------------- FILE HEADER ------------------------------------------
003
004 This file is part of deegree.
005 Copyright (C) 2001-2008 by:
006 EXSE, Department of Geography, University of Bonn
007 http://www.giub.uni-bonn.de/deegree/
008 lat/lon GmbH
009 http://www.lat-lon.de
010
011 This library is free software; you can redistribute it and/or
012 modify it under the terms of the GNU Lesser General Public
013 License as published by the Free Software Foundation; either
014 version 2.1 of the License, or (at your option) any later version.
015
016 This library is distributed in the hope that it will be useful,
017 but WITHOUT ANY WARRANTY; without even the implied warranty of
018 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019 Lesser General Public License for more details.
020
021 You should have received a copy of the GNU Lesser General Public
022 License along with this library; if not, write to the Free Software
023 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024
025 Contact:
026
027 Andreas Poth
028 lat/lon GmbH
029 Aennchenstr. 19
030 53115 Bonn
031 Germany
032 E-Mail: poth@lat-lon.de
033
034 Prof. Dr. Klaus Greve
035 Department of Geography
036 University of Bonn
037 Meckenheimer Allee 166
038 53115 Bonn
039 Germany
040 E-Mail: greve@giub.uni-bonn.de
041
042
043 ---------------------------------------------------------------------------*/
044
045 // $Id: RequestUser.java 20969 2009-11-23 15:51:29Z apoth $
046 package org.deegree.enterprise.control.ajax;
047
048 // JDK 1.3
049 import java.lang.reflect.InvocationTargetException;
050 import java.lang.reflect.Method;
051 import java.util.Properties;
052
053 import javax.servlet.http.HttpServletRequest;
054
055 /**
056 * Encapsulates all client information.
057 * <P>
058 *
059 * @author <a href="mailto:friebe@gmx.net">Torsten Friebe</a>
060 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
061 *
062 * @version $Revision: 20969 $ $Date: 2009-11-23 16:51:29 +0100 (Mo, 23. Nov 2009) $
063 */
064 class RequestUser {
065 private Properties userData;
066
067 /**
068 * Creates an empty object.
069 */
070 protected RequestUser() {
071 this.userData = new Properties();
072 }
073
074 /**
075 * Creates a request user object with client information retrieved out of the request object.
076 *
077 * @param request
078 * the request object containing user and client data
079 */
080 public RequestUser( HttpServletRequest request ) {
081 this.userData = new Properties();
082 this.parseRequest( request );
083 }
084
085 /**
086 *
087 * @return Remote user
088 */
089 public String getRemoteUser() {
090 return this.userData.getProperty( "RemoteUser" );
091 }
092
093 /**
094 * @return Remote address
095 */
096 public String getRemoteAddr() {
097 return this.userData.getProperty( "RemoteAddr" );
098 }
099
100 /**
101 * @return Remote host
102 */
103 public String getRemoteHost() {
104 return this.userData.getProperty( "RemoteHost" );
105 }
106
107 /**
108 * @return Authorization scheme
109 */
110 public String getAuthType() {
111 return this.userData.getProperty( "AuthType" );
112 }
113
114 /**
115 * @return the user principal
116 */
117 public String getUserPrincipal() {
118 Object _obj = userData.get( "UserPrincipal" );
119
120 if ( _obj instanceof java.security.Principal ) {
121 java.security.Principal _principal = (java.security.Principal) _obj;
122 return _principal.getName();
123 } else if ( _obj instanceof String ) {
124 return (String) _obj;
125 }
126
127 return _obj.toString();
128 }
129
130 /**
131 * Parse request object for user specific attributes.
132 *
133 * @param request
134 * to parse
135 */
136 protected void parseRequest( HttpServletRequest request ) {
137 try {
138 this.userData.setProperty( "RemoteUser", (String) getRequestValue( request, "getRemoteUser", "[unknown]" ) );
139
140 this.userData.setProperty( "RemoteAddr", (String) getRequestValue( request, "getRemoteAddr", "[unknown]" ) );
141
142 this.userData.setProperty( "RemoteHost", (String) getRequestValue( request, "getRemoteHost", "[unknown]" ) );
143
144 this.userData.setProperty( "AuthType", (String) getRequestValue( request, "getAuthType", "[unknown]" ) );
145
146 this.userData.put( "UserPrincipal", getRequestValue( request, "getUserPrincipal", "[unknown]" ) );
147 } catch ( Exception ex ) {
148 ex.printStackTrace();
149 }
150 }
151
152 /**
153 *
154 *
155 * @param request
156 * @param methodName
157 * @param defaultValue
158 *
159 * @return the value of a request or if the request is null, the methodName is null or empty, <code>null</code>
160 * will be returned.
161 *
162 * @throws NoSuchMethodException
163 * @throws InvocationTargetException
164 * @throws IllegalAccessException
165 */
166 protected Object getRequestValue( HttpServletRequest request, String methodName, Object defaultValue )
167 throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
168 if ( ( request != null ) && ( methodName != null ) && !methodName.equals( "" ) ) {
169 // System.err.println( "looking for :" + methodName );
170 // use refection for method
171 Method _objmethod = request.getClass().getMethod( methodName, new Class[] {} );
172
173 // System.err.println( "got :" + _objmethod.getName() );
174 // get the result of the method invocation
175 Object _result = _objmethod.invoke( request, new Object[] {} );
176
177 // System.err.println( "returns :" + _result );
178 if ( _result != null ) {
179 return _result;
180 }
181 return defaultValue;
182 }
183
184 return null;
185 }
186 }