001 //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.4_testing/src/org/deegree/security/owsproxy/OWSProxyServletFilter.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 package org.deegree.security.owsproxy;
037
038 import java.awt.Color;
039 import java.awt.Font;
040 import java.awt.Graphics;
041 import java.awt.image.BufferedImage;
042 import java.io.File;
043 import java.io.IOException;
044 import java.io.InputStream;
045 import java.io.InputStreamReader;
046 import java.io.OutputStream;
047 import java.lang.reflect.Constructor;
048 import java.lang.reflect.InvocationTargetException;
049 import java.net.MalformedURLException;
050 import java.net.URL;
051 import java.util.Enumeration;
052 import java.util.Properties;
053
054 import javax.servlet.Filter;
055 import javax.servlet.FilterChain;
056 import javax.servlet.FilterConfig;
057 import javax.servlet.ServletContext;
058 import javax.servlet.ServletException;
059 import javax.servlet.ServletRequest;
060 import javax.servlet.ServletResponse;
061 import javax.servlet.http.HttpServletRequest;
062 import javax.servlet.http.HttpServletResponse;
063
064 import org.deegree.enterprise.servlet.ServletRequestWrapper;
065 import org.deegree.enterprise.servlet.ServletResponseWrapper;
066 import org.deegree.framework.log.ILogger;
067 import org.deegree.framework.log.LoggerFactory;
068 import org.deegree.framework.util.ImageUtils;
069 import org.deegree.framework.util.MimeTypeMapper;
070 import org.deegree.framework.util.StringTools;
071 import org.deegree.framework.xml.NamespaceContext;
072 import org.deegree.framework.xml.XMLParsingException;
073 import org.deegree.framework.xml.XMLTools;
074 import org.deegree.model.spatialschema.Envelope;
075 import org.deegree.ogcbase.BaseURL;
076 import org.deegree.ogcbase.CommonNamespaces;
077 import org.deegree.ogcwebservices.InvalidParameterValueException;
078 import org.deegree.ogcwebservices.OGCRequestFactory;
079 import org.deegree.ogcwebservices.OGCWebServiceException;
080 import org.deegree.ogcwebservices.OGCWebServiceRequest;
081 import org.deegree.ogcwebservices.wcs.getcoverage.GetCoverage;
082 import org.deegree.ogcwebservices.wms.operation.GetMap;
083 import org.deegree.security.SecurityConfigurationException;
084 import org.deegree.security.UnauthorizedException;
085 import org.deegree.security.drm.SecurityAccessManager;
086 import org.deegree.security.drm.model.User;
087 import org.deegree.security.owsrequestvalidator.OWSValidator;
088 import org.deegree.security.owsrequestvalidator.Policy;
089 import org.deegree.security.owsrequestvalidator.PolicyDocument;
090 import org.w3c.dom.Document;
091
092 /**
093 * An OWSProxyPolicyFilter can be registered as a ServletFilter to a web context. It offeres a facade that looks like a
094 * OWS but additionaly enables validating incoming requests and outgoing responses against rules defined in a policy
095 * document and/or a deegree user and right management system.
096 *
097 * @see org.deegree.security.drm.SecurityRegistry
098 *
099 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
100 * @author last edited by: $Author: mschneider $
101 *
102 * @version $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
103 * @deprecated use
104 * @see ConfigurableOWSProxyServletFilter
105 */
106 @Deprecated
107 public class OWSProxyServletFilter implements Filter {
108
109 private static final ILogger LOG = LoggerFactory.getLogger( OWSProxyServletFilter.class );
110
111 private static final NamespaceContext nsContext = CommonNamespaces.getNamespaceContext();
112
113 private FilterConfig config;
114
115 private OWSProxyPolicyFilter pFilter;
116
117 // private Policy policy = null;
118 private SecurityConfig secConfig;
119
120 private String altRequestPage;
121
122 private String altResponsePage;
123
124 private boolean imageExpected = false;
125
126 /**
127 * initialize the filter with parameters from the deployment descriptor
128 *
129 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
130 */
131 @SuppressWarnings("unchecked")
132 public void init( FilterConfig config )
133 throws ServletException {
134 this.config = config;
135
136 Properties validators = new Properties();
137 try {
138 InputStream is = OWSProxyServletFilter.class.getResourceAsStream( "validators.properties" );
139 validators.load( is );
140 is.close();
141 } catch ( Exception e ) {
142 throw new ServletException( e );
143 }
144
145 pFilter = new OWSProxyPolicyFilter();
146 String proxyURL = "http://127.0.0.1/owsproxy/proxy";
147 if ( config.getInitParameter( "PROXYURL" ) != null ) {
148 proxyURL = config.getInitParameter( "PROXYURL" );
149 }
150 Enumeration<String> iterator = config.getInitParameterNames();
151 while ( iterator.hasMoreElements() ) {
152 String paramName = iterator.nextElement();
153 String paramValue = config.getInitParameter( paramName );
154 if ( paramName.endsWith( "POLICY" ) ) {
155 paramValue = config.getServletContext().getRealPath( paramValue );
156 File file = new File( paramValue );
157 URL fileURL = null;
158 try {
159 fileURL = file.toURI().toURL();
160 } catch ( MalformedURLException e ) {
161 LOG.logError( "Couldn't create an url from the configured POLICY parameter: " + paramValue
162 + " because: " + e.getMessage() );
163 throw new ServletException( e );
164 }
165 if ( fileURL != null ) {
166 LOG.logDebug( "OWSProxyFilter: reading configuration file from : " + fileURL.toExternalForm() );
167 initValidator( proxyURL, paramName, fileURL, validators );
168 }
169 }
170
171 }
172 // } catch ( Exception e ) {
173 // LOG.logError( e.getMessage(), e );
174 // throw new ServletException( e );
175 // }
176 LOG.logInfo( "OWSProxyServlet intitialized successfully" );
177 LOG.logWarning( "You are running a deprecated version of OWSProxy!" );
178 LOG.logWarning( "Please use the ConfigurableOWSProxyServletFilter instead." );
179 altRequestPage = config.getInitParameter( "ALTREQUESTPAGE" );
180 altResponsePage = config.getInitParameter( "ALTRESPONSEPAGE" );
181 }
182
183 /**
184 *
185 * @param proxyURL
186 * @param paramName
187 * @param paramValue
188 * @param validators
189 * @throws ServletException
190 */
191 private void initValidator( String proxyURL, String paramName, URL paramValue, Properties validators )
192 throws ServletException {
193 try {
194 PolicyDocument doc = new PolicyDocument( paramValue );
195 Policy policy = doc.getPolicy();
196 if ( secConfig == null && policy.getSecurityConfig() != null ) {
197 // use security configuration of the first policy that defined one.
198 // this is possible because just one security configuration can be
199 // used within a deegree/VM instance
200 secConfig = policy.getSecurityConfig();
201 }
202 int pos = paramName.indexOf( ':' );
203 String service = paramName.substring( 0, pos );
204
205 // describes the signature of the required constructor
206 Class<?>[] cl = new Class<?>[2];
207 cl[0] = Policy.class;
208 cl[1] = String.class;
209
210 // set parameter to submitt to the constructor
211 Object[] o = new Object[2];
212 o[0] = policy;
213 o[1] = proxyURL;
214
215 Class<?> clzz = Class.forName( validators.getProperty( service ) );
216 Constructor<?> con = clzz.getConstructor( cl );
217
218 pFilter.addValidator( service, (OWSValidator) con.newInstance( o ) );
219 } catch ( SecurityConfigurationException e ) {
220 LOG.logError( "Couldn't create a policy document from given value: " + paramValue + ", because : "
221 + e.getMessage() );
222 throw new ServletException( e );
223 } catch ( XMLParsingException e ) {
224 LOG.logError( "Couldn't create a policy from given value: " + paramValue + ", because : " + e.getMessage() );
225 throw new ServletException( e );
226 } catch ( ClassNotFoundException e ) {
227 LOG.logError( "The classloader couldn't find an appropriate class for the configured service, because"
228 + e.getMessage() );
229 throw new ServletException( e );
230 } catch ( NoSuchMethodException e ) {
231 LOG.logError( "The classloader couldn't find a constructor for the configured service, because"
232 + e.getMessage() );
233 throw new ServletException( e );
234 } catch ( InstantiationException e ) {
235 LOG.logError( "The classloader couldn't instantiate the configured service, because" + e.getMessage() );
236 throw new ServletException( e );
237 } catch ( IllegalAccessException e ) {
238 LOG.logError( "The classloader couldn't instantiate the configured service, because" + e.getMessage() );
239 throw new ServletException( e );
240 } catch ( InvocationTargetException e ) {
241 LOG.logError( "The classloader couldn't instantiate the configured service, because" + e.getMessage() );
242 throw new ServletException( e );
243 }
244 }
245
246 /**
247 * free resources allocated by the filter
248 *
249 * @see javax.servlet.Filter#destroy()
250 */
251 public void destroy() {
252 config = null;
253 }
254
255 /**
256 * perform filter
257 *
258 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse,
259 * javax.servlet.FilterChain)
260 */
261 public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain )
262 throws IOException, ServletException {
263
264 // Map<String, String[]> params = request.getParameterMap();
265
266 // encapsulate the servelt request into a wrapper object to ensure
267 // the availability of the InputStream
268 ServletRequestWrapper requestWrapper = null;
269
270 if ( request instanceof ServletRequestWrapper ) {
271 LOG.logDebug( "OWSProxySerlvetFilter: the incoming request is actually an org.deegree.enterprise.servlet.RequestWrapper, so not creating new instance." );
272 requestWrapper = (ServletRequestWrapper) request;
273 } else {
274 requestWrapper = new ServletRequestWrapper( (HttpServletRequest) request );
275 }
276
277 LOG.logDebug( "OWSProxySerlvetFilter: GetContentype(): " + requestWrapper.getContentType() );
278
279 OGCWebServiceRequest owsReq = null;
280 try {
281 owsReq = OGCRequestFactory.create( requestWrapper );
282 } catch ( OGCWebServiceException e ) {
283 LOG.logError( "OWSProxyServletFilter: Couln't create an OGCWebserviceRequest because: " + e.getMessage(), e );
284 throw new ServletException( e.getMessage() );
285 }
286 imageExpected = isImageRequested( owsReq );
287 // extract user from the request
288 User user = null;
289 try {
290 user = getUser( requestWrapper, owsReq );
291 } catch ( Exception e1 ) {
292 handleResponseMissingAutorization( (HttpServletRequest) request, (HttpServletResponse) response, owsReq,
293 e1.getMessage() );
294 return;
295 }
296 try {
297 pFilter.validateGeneralConditions( (HttpServletRequest) request, requestWrapper.getContentLength(), user );
298 pFilter.validate( owsReq, user );
299 } catch ( InvalidParameterValueException e ) {
300 handleRequestMissingAutorization( (HttpServletRequest) request, (HttpServletResponse) response, owsReq,
301 e.getMessage() );
302 return;
303 } catch ( UnauthorizedException e ) {
304 handleRequestMissingAutorization( (HttpServletRequest) request, (HttpServletResponse) response, owsReq,
305 e.getMessage() );
306 return;
307 } catch ( Exception e ) {
308 LOG.logError( e.getMessage(), e );
309 request.setAttribute( "MESSAGE", e.getMessage() );
310 ServletContext sc = config.getServletContext();
311 sc.getRequestDispatcher( altResponsePage ).forward( request, response );
312 return;
313 }
314 // encapsulate the servelt response into a wrapper object to ensure
315 // the availability of the OutputStream
316 ServletResponseWrapper resWrap = new ServletResponseWrapper( (HttpServletResponse) response );
317 logHttpRequest( requestWrapper );
318 // forward request to the next filter or servlet
319 chain.doFilter( requestWrapper, resWrap );
320 // get result from performing the request
321 OutputStream os = resWrap.getOutputStream();
322 byte[] b = ( (ServletResponseWrapper.ProxyServletOutputStream) os ).toByteArray();
323
324 if ( !imageExpected ) {
325 LOG.logDebug( new String( b ) );
326 }
327 try {
328 // validate the result of a request performing
329 String mime = resWrap.getContentType();
330 LOG.logDebug( "mime type raw: " + mime );
331 if ( mime != null ) {
332 mime = StringTools.toArray( mime, ";", false )[0];
333 } else {
334 if ( imageExpected ) {
335 mime = "image/jpeg";
336 } else {
337 mime = "text/xml";
338 }
339 }
340 LOG.logDebug( "mime type: " + mime );
341 b = pFilter.validate( owsReq, b, mime, user );
342 } catch ( InvalidParameterValueException ee ) {
343 LOG.logError( ee.getMessage(), ee );
344 handleResponseMissingAutorization( (HttpServletRequest) request, (HttpServletResponse) response, owsReq,
345 ee.getMessage() );
346 return;
347 } catch ( UnauthorizedException e ) {
348 LOG.logError( e.getMessage(), e );
349 handleResponseMissingAutorization( (HttpServletRequest) request, (HttpServletResponse) response, owsReq,
350 e.getMessage() );
351 return;
352 }
353
354 response.setContentType( resWrap.getContentType() );
355 // write result back to the client
356 os = response.getOutputStream();
357 os.write( b );
358 os.close();
359 }
360
361 /**
362 * logs a requests parameters and meta informations
363 *
364 * @param reqWrap
365 */
366 private void logHttpRequest( ServletRequestWrapper reqWrap ) {
367 if ( LOG.getLevel() == ILogger.LOG_DEBUG ) {
368 LOG.logDebug( "getRemoteAddr " + reqWrap.getRemoteAddr() );
369 LOG.logDebug( "getRemotePort " + reqWrap.getRemotePort() );
370 LOG.logDebug( "getLocalPort " + reqWrap.getLocalPort() );
371 LOG.logDebug( "getMethod " + reqWrap.getMethod() );
372 LOG.logDebug( "getQueryString " + reqWrap.getQueryString() );
373 LOG.logDebug( "getPathInfo " + reqWrap.getPathInfo() );
374 LOG.logDebug( "getRequestURI " + reqWrap.getRequestURI() );
375 LOG.logDebug( "getServerName " + reqWrap.getServerName() );
376 LOG.logDebug( "getServerPort " + reqWrap.getServerPort() );
377 LOG.logDebug( "getServletPath " + reqWrap.getServletPath() );
378 }
379 }
380
381 /**
382 * go to alternative page if autorization to perform the desired request ist missing
383 *
384 * @param request
385 * @param response
386 * @param owsReq
387 * @param message
388 * @throws IOException
389 * @throws ServletException
390 */
391 private void handleRequestMissingAutorization( HttpServletRequest request, HttpServletResponse response,
392 OGCWebServiceRequest owsReq, String message )
393 throws IOException, ServletException {
394 if ( message == null ) {
395 message = "missing authorization";
396 }
397 if ( imageExpected ) {
398 int width = 500;
399 int height = 500;
400 if ( owsReq != null && owsReq instanceof GetMap ) {
401 width = ( (GetMap) owsReq ).getWidth();
402 height = ( (GetMap) owsReq ).getHeight();
403 } else if ( owsReq != null && owsReq instanceof GetCoverage ) {
404 Envelope env = (Envelope) ( (GetCoverage) owsReq ).getDomainSubset().getSpatialSubset().getGrid();
405 width = (int) env.getWidth();
406 height = (int) env.getHeight();
407 }
408 response.setContentType( "image/jpeg" );
409 OutputStream os = response.getOutputStream();
410 BufferedImage bi = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB );
411 Graphics g = bi.getGraphics();
412 g.setColor( Color.WHITE );
413 g.fillRect( 0, 0, width, height );
414 g.setColor( Color.BLACK );
415 g.setFont( new Font( "DIALOG", Font.PLAIN, 14 ) );
416 g.drawString( Messages.getString( "MISSINGAUTHORIZATION" ), 5, 60 );
417 String[] lines = StringTools.toArray( message, ":|", false );
418 int y = 100;
419 for ( int i = 0; i < lines.length; i++ ) {
420 g.drawString( lines[i], 5, y );
421 y = y + 30;
422 }
423 g.dispose();
424 try {
425 ImageUtils.saveImage( bi, os, "jpeg", 0.95f );
426 } catch ( Exception e ) {
427 e.printStackTrace();
428 }
429 os.close();
430 } else {
431 request.setAttribute( "MESSAGE", message );
432 ServletContext sc = config.getServletContext();
433 sc.getRequestDispatcher( altRequestPage ).forward( request, response );
434 }
435 }
436
437 /**
438 * go to alternative page if autorization to deliver the result to a request is missing
439 *
440 * @param request
441 * @param response
442 * @param owsReq
443 * @param message
444 * @throws IOException
445 * @throws ServletException
446 */
447 private void handleResponseMissingAutorization( HttpServletRequest request, HttpServletResponse response,
448 OGCWebServiceRequest owsReq, String message )
449 throws IOException, ServletException {
450
451 if ( imageExpected ) {
452 int width = 500;
453 int height = 500;
454 if ( owsReq != null && owsReq instanceof GetMap ) {
455 width = ( (GetMap) owsReq ).getWidth();
456 height = ( (GetMap) owsReq ).getHeight();
457 } else if ( owsReq != null && owsReq instanceof GetCoverage ) {
458 Envelope env = (Envelope) ( (GetCoverage) owsReq ).getDomainSubset().getSpatialSubset().getGrid();
459 width = (int) env.getWidth();
460 height = (int) env.getHeight();
461 }
462 response.setContentType( "image/jpeg" );
463 OutputStream os = response.getOutputStream();
464 BufferedImage bi = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB );
465 Graphics g = bi.getGraphics();
466 g.setColor( Color.WHITE );
467 g.fillRect( 0, 0, width, height );
468 g.setColor( Color.BLACK );
469 g.setFont( new Font( "DIALOG", Font.PLAIN, 14 ) );
470 String[] lines = StringTools.toArray( message, ":|", false );
471 int y = 100;
472 for ( int i = 0; i < lines.length; i++ ) {
473 g.drawString( lines[i], 5, y );
474 y = y + 30;
475 }
476 g.dispose();
477 try {
478 ImageUtils.saveImage( bi, os, "jpeg", 0.95f );
479 } catch ( Exception e ) {
480 LOG.logError( e.getMessage(), e );
481 }
482 os.write( message.getBytes() );
483 os.close();
484 } else {
485 request.setAttribute( "MESSAGE", message );
486 ServletContext sc = config.getServletContext();
487 sc.getRequestDispatcher( altResponsePage ).forward( request, response );
488 }
489 }
490
491 /**
492 * returns the user from the incomming request. The extraction of the user takes three steps
493 * <ul>
494 * <li>1. get the vendorspecific parameter 'USER' & 'PASSWORD'
495 * <li>2. if 1.) is null get the remote users name (request.getRemoteUser())
496 * </ul>
497 *
498 * @param request
499 * @return the user from the incomming request.
500 * @throws InvalidParameterValueException
501 */
502 private User getUser( HttpServletRequest request, OGCWebServiceRequest owsReq )
503 throws UnauthorizedException, IOException, InvalidParameterValueException {
504
505 String sessionId = owsReq.getVendorSpecificParameter( "SESSIONID" );
506 String user = owsReq.getVendorSpecificParameter( "USER" );
507 String password = null;
508 if ( user != null ) {
509 LOG.logDebug( "get user from user/password parameter" );
510 return authentificateFromUserPw( owsReq );
511 } else if ( sessionId == null && request.getUserPrincipal() != null ) {
512 LOG.logDebug( "get user from UserPrinicipal" );
513 user = request.getUserPrincipal().getName();
514 if ( user.indexOf( "\\" ) > 1 ) {
515 String[] us = StringTools.toArray( user, "\\", false );
516 user = us[us.length - 1];
517 }
518 } else if ( secConfig != null && sessionId != null ) {
519 LOG.logDebug( "get user from WAS/sessionID" );
520 AuthentificationSettings as = secConfig.getAuthsettings();
521 if ( as != null ) {
522 BaseURL baseUrl = as.getAuthentificationURL();
523 String tmp[] = getUserFromWAS( baseUrl.getOnlineResource().toExternalForm(), sessionId );
524 user = tmp[0];
525 password = tmp[1];
526 }
527 } else {
528 LOG.logDebug( "get user as source IP address because wether USER, "
529 + "SESSIONID nor Userprincipal are available" );
530 user = request.getRemoteAddr();
531 }
532 LOG.logDebug( StringTools.concat( 100, "USER: ", user, "/", password ) );
533 User usr = null;
534 try {
535 if ( user != null && SecurityAccessManager.isInitialized() ) {
536 SecurityAccessManager sam = SecurityAccessManager.getInstance();
537
538 usr = sam.getUserByName( user );
539 if ( request.getUserPrincipal() == null ) {
540 // a user just must authenticate himself if he is
541 // not identified by its user name being send within
542 // the HTTP header
543 usr.authenticate( password );
544 } else {
545 // if user is read from UserPrincipal his password must
546 // be read from security management
547 usr.authenticate( sam.getUserByName( user ).getPassword() );
548 }
549 }
550 } catch ( Exception e ) {
551 LOG.logError( e.getMessage(), e );
552 throw new UnauthorizedException( Messages.format( "OWSProxyServletFilter.USERERROR", user ) );
553 }
554
555 return usr;
556 }
557
558 /**
559 * Authenticates a user if he is identified by its name and password passed as vendorspecific parameters with an OGC
560 * service request
561 *
562 * @param owsReq
563 * @return the user
564 * @throws UnauthorizedException
565 * @throws InvalidParameterValueException
566 */
567 private User authentificateFromUserPw( OGCWebServiceRequest owsReq )
568 throws UnauthorizedException, InvalidParameterValueException {
569 String user = owsReq.getVendorSpecificParameter( "USER" );
570 String password = owsReq.getVendorSpecificParameter( "PASSWORD" );
571
572 LOG.logDebug( "USER: ", user );
573 LOG.logDebug( "PASSWORD: ", password );
574 if ( password == null ) {
575 throw new InvalidParameterValueException( Messages.getString( "PASSWORDMISSING" ) );
576 }
577
578 User usr = null;
579 try {
580 SecurityAccessManager sam = SecurityAccessManager.getInstance();
581 usr = sam.getUserByName( user );
582 usr.authenticate( password );
583 } catch ( Exception e ) {
584 LOG.logError( e.getMessage(), e );
585 if ( !( user.equals( "anonymous" ) ) ) {
586 throw new UnauthorizedException( Messages.format( "OWSProxyServletFilter.USERERROR", user ) );
587 }
588 }
589
590 return usr;
591 }
592
593 /**
594 * access user informations from a remote WAAS. an array of Strings will be returned. with
595 * <ul>
596 * <li>[0] = user name
597 * <li>[1] = the users password
598 * </ul>
599 *
600 * @param sessionID
601 * @return all users.
602 * @throws IOException
603 */
604 private String[] getUserFromWAS( String urlStr, String sessionID )
605 throws IOException {
606 String[] user = new String[3];
607 try {
608 StringBuffer sb = new StringBuffer( 200 );
609 sb.append( urlStr ).append( "?REQUEST=DescribeUser&Service=WAS&" );
610 sb.append( "SESSIONID=" ).append( sessionID ).append( "&version=1.0.0" );
611 URL url = new URL( sb.toString() );
612 InputStreamReader isr = new InputStreamReader( url.openStream() );
613 Document doc = XMLTools.parse( isr );
614 user[0] = XMLTools.getNodeAsString( doc, "/User/UserName", nsContext, null );
615 user[1] = XMLTools.getNodeAsString( doc, "/User/Password", nsContext, null );
616 } catch ( Exception e ) {
617 LOG.logError( e.getMessage(), e );
618 throw new IOException( Messages.getString( "OWSProxyServletFilter.WASACCESS" ) );
619 }
620 return user;
621 }
622
623 private boolean isImageRequested( OGCWebServiceRequest request ) {
624 boolean imageReq = false;
625
626 if ( request instanceof GetMap ) {
627 imageReq = ( (GetMap) request ).getExceptions().indexOf( "image" ) > -1;
628 } else if ( request instanceof GetCoverage ) {
629 String format = ( (GetCoverage) request ).getOutput().getFormat().getCode();
630 imageReq = MimeTypeMapper.isKnownImageType( "image/" + format );
631 }
632
633 LOG.logDebug( "authorization problems expected to be returned as image: ", imageReq );
634
635 return imageReq;
636 }
637
638 }