annotate servlet/src/digilib/auth/AuthOpsImpl.java @ 73:3b8797fc3e90

New servlet version 1.5b. Mostly cleanup. Global parameters for digilib now in DigilibConfiguration, per request parameters are now all in DigilibRequest. The DocuImage implementation can be selected by the configuration docuimage-class. Pixel-by-pixel view implemented with "mo=clip".
author robcast
date Fri, 24 Jan 2003 21:40:59 +0100
parents 0ff3ede32060
children afe7ff98bb71
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
1 /* AuthOps -- Authentication class implementation
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
2
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
3 Digital Image Library servlet components
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
4
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
5 Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
6
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
7 This program is free software; you can redistribute it and/or modify it
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
9 Free Software Foundation; either version 2 of the License, or (at your
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
10 option) any later version.
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
11
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
12 Please read license.txt for the full details. A copy of the GPL
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
13 may be found at http://www.gnu.org/copyleft/lgpl.html
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
14
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
16 along with this program; if not, write to the Free Software
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
18
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
19 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
20
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
21 package digilib.auth;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
22
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
23 import javax.servlet.http.HttpServletRequest;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
24 import java.util.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
25
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
26 import digilib.*;
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
27 import digilib.servlet.DigilibRequest;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
28
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
29 /** Basic implementation of AuthOps interface.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
30 *
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
31 * Provides basic implementations. Only rolesForPath needs to be implemented
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
32 * by specific implementations.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
33 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
34 public abstract class AuthOpsImpl implements AuthOps {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
35
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
36 /** Local utils object. */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
37 protected Utils util;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
38
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
39 /** Default constructor. */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
40 public AuthOpsImpl() {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
41 util = new Utils();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
42 try {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
43 init();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
44 } catch (AuthOpException e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
45 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
46 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
47
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
48 /** Constructor taking an utils object.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
49 * @param u utils object.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
50 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
51 public AuthOpsImpl(Utils u) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
52 util = u;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
53 try {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
54 init();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
55 } catch (AuthOpException e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
56 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
57 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
58
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
59 /** Test if the request is allowed to access filepath.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
60 * @param filepath filepath to be acessed.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
61 * @param request Request with user information.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
62 * @throws AuthOpException Exception thrown on error.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
63 * @return true if the request is allowed.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
64 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
65 public boolean isAuthRequired(String filepath, HttpServletRequest request) throws AuthOpException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
66 // check permissions
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
67 List rolesRequired = rolesForPath(filepath, request);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
68 return (rolesRequired != null);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
69 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
70
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
71 /**
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
72 * @see digilib.auth.AuthOps#isAuthRequired(digilib.servlet.DigilibRequest)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
73 */
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
74 public boolean isAuthRequired(DigilibRequest request)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
75 throws AuthOpException {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
76 // check permissions
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
77 List rolesRequired = rolesForPath(request);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
78 return (rolesRequired != null);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
79 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
80
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
81 /** Return authorization roles needed for request.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
82 *
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
83 * Returns a list of authorization roles that would be allowed to access the
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
84 * specified path. The location information of the request is considered also.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
85 * @param filepath filepath to be accessed.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
86 * @param request ServletRequest with address information.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
87 * @throws AuthOpException Exception thrown on error.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
88 * @return List of Strings with role names.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
89 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
90 public boolean isAuthorized(String filepath, HttpServletRequest request) throws AuthOpException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
91 List rolesAllowed = rolesForPath(filepath, request);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
92 return isRoleAuthorized(rolesAllowed, request);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
93 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
94
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
95 /**
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
96 * @see digilib.auth.AuthOps#isAuthorized(digilib.servlet.DigilibRequest)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
97 */
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
98 public boolean isAuthorized(DigilibRequest request)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
99 throws AuthOpException {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
100 List rolesAllowed = rolesForPath(request);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
101 return isRoleAuthorized(rolesAllowed, request);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
102 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
103
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
104 /** Test request authorization against a list of roles.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
105 * @param roles List of Strings with role names.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
106 * @param request ServletRequest with address information.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
107 * @return true if the user information in the request authorizes one of the roles.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
108 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
109 public boolean isRoleAuthorized(List roles, HttpServletRequest request) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
110 ListIterator r = roles.listIterator();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
111 String s = "";
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
112 while (r.hasNext()) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
113 s = (String)r.next();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
114 util.dprintln(5, "Testing role: "+s);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
115 if (request.isUserInRole(s)) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
116 util.dprintln(5, "Role Authorized");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
117 return true;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
118 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
119 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
120 return false;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
121 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
122
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
123 /**
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
124 * @see digilib.auth.AuthOps#isRoleAuthorized(java.util.List, digilib.servlet.DigilibRequest)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
125 */
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
126 public boolean isRoleAuthorized(List roles, DigilibRequest request) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
127 ListIterator r = roles.listIterator();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
128 String s = "";
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
129 while (r.hasNext()) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
130 s = (String)r.next();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
131 util.dprintln(5, "Testing role: "+s);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
132 if (((HttpServletRequest)request.getServletRequest()).isUserInRole(s)) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
133 util.dprintln(5, "Role Authorized");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
134 return true;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
135 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
136 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
137 return false;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
138 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
139
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
140 public abstract void init() throws AuthOpException;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
141
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
142 public abstract List rolesForPath(String filepath, HttpServletRequest request) throws AuthOpException;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
143
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
144 public abstract List rolesForPath(DigilibRequest request) throws AuthOpException;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 1
diff changeset
145
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
146 }