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