KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > jguard > example > struts > admin > actions > PrincipalDispatchAction


1 /*
2 jGuard is a security framework based on top of jaas (java authentication and authorization security).
3 it is written for web applications, to resolve simply, access control problems.
4 version $Name$
5 http://sourceforge.net/projects/jguard/
6
7 Copyright (C) 2004 Charles GAY
8
9 This library is free software; you can redistribute it and/or
10 modify it under the terms of the GNU Lesser General Public
11 License as published by the Free Software Foundation; either
12 version 2.1 of the License, or (at your option) any later version.
13
14 This library is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Lesser General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public
20 License along with this library; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
23
24 jGuard project home page:
25 http://sourceforge.net/projects/jguard/
26
27 */

28 package net.sf.jguard.example.struts.admin.actions;
29
30 import java.awt.Graphics2D JavaDoc;
31 import java.awt.RenderingHints JavaDoc;
32 import java.awt.geom.AffineTransform JavaDoc;
33 import java.awt.image.AffineTransformOp JavaDoc;
34 import java.awt.image.BufferedImage JavaDoc;
35 import java.security.Principal JavaDoc;
36 import java.util.ArrayList JavaDoc;
37 import java.util.Arrays JavaDoc;
38 import java.util.HashMap JavaDoc;
39 import java.util.HashSet JavaDoc;
40 import java.util.Iterator JavaDoc;
41 import java.util.List JavaDoc;
42 import java.util.Map JavaDoc;
43 import java.util.Set JavaDoc;
44
45 import javax.imageio.ImageIO JavaDoc;
46 import javax.servlet.http.HttpServletRequest JavaDoc;
47 import javax.servlet.http.HttpServletResponse JavaDoc;
48
49 import net.sf.jguard.core.CoreConstants;
50 import net.sf.jguard.core.authorization.permissions.Domain;
51 import net.sf.jguard.core.authorization.permissions.JGPermissionCollection;
52 import net.sf.jguard.core.principals.RolePrincipal;
53 import net.sf.jguard.example.struts.actions.BaseAction;
54 import net.sf.jguard.ext.SecurityConstants;
55 import net.sf.jguard.ext.authentication.AuthenticationException;
56 import net.sf.jguard.ext.authentication.manager.AuthenticationManager;
57 import net.sf.jguard.ext.authorization.AuthorizationException;
58 import net.sf.jguard.ext.authorization.manager.AuthorizationManager;
59
60 import org.apache.log4j.Logger;
61 import org.apache.struts.action.ActionForm;
62 import org.apache.struts.action.ActionForward;
63 import org.apache.struts.action.ActionMapping;
64 import org.apache.struts.action.DynaActionForm;
65
66 import salvo.jesus.graph.DirectedGraphImpl;
67 import salvo.jesus.graph.Graph;
68 import salvo.jesus.graph.Vertex;
69 import salvo.jesus.graph.VertexImpl;
70 import salvo.jesus.graph.visual.VisualGraph;
71 import salvo.jesus.graph.visual.layout.GraphLayoutManager;
72 import salvo.jesus.graph.visual.layout.StraightLineLayout;
73
74
75 /**
76  * @author <a HREF="mailto:diabolo512@users.sourceforge.net">Charles Gay</a>
77  */

78 public class PrincipalDispatchAction extends BaseAction{
79
80     private static Logger logger = Logger.getLogger(PrincipalDispatchAction.class);
81
82     /**
83      * list principals (Principals).
84      * @param mapping
85      * @param form
86      * @param request
87      * @param response
88      * @return
89      */

90     public ActionForward list(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
91         DynaActionForm dyna = (DynaActionForm)form;
92         Set JavaDoc roles = null;
93
94         AuthorizationManager am = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER);
95         roles = am.listPrincipals();
96         Iterator JavaDoc itPrincipals = roles.iterator();
97         List JavaDoc principalsList = new ArrayList JavaDoc();
98         while(itPrincipals.hasNext()){
99             principalsList.add(itPrincipals.next());
100         }
101         dyna.set("principals",principalsList);
102         return mapping.findForward("listPrincipalsOK");
103
104     }
105
106     /**
107      * Add inheritance beteween two existings principals.
108      * @param mapping
109      * @param form
110      * @param request
111      * @param response
112      * @return
113      */

114     public ActionForward deleteInheritance(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
115         DynaActionForm dyna = (DynaActionForm)form;
116         AuthorizationManager am = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER);
117
118         try {
119             am.deleteInheritance((String JavaDoc)dyna.get("principalAsc"), (String JavaDoc)dyna.get("principalDesc"));
120         } catch (AuthorizationException e) {
121             e.printStackTrace();
122         }
123
124         return mapping.findForward("addInheritanceOK");
125     }
126
127     /**
128      * Delete inheritance beteween two existings principals.
129      * @param mapping
130      * @param form
131      * @param request
132      * @param response
133      * @return
134      */

135     public ActionForward addInheritance(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
136         DynaActionForm dyna = (DynaActionForm)form;
137         AuthorizationManager am = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER);
138
139         try {
140             am.addInheritance((String JavaDoc)dyna.get("principalAsc"), (String JavaDoc)dyna.get("principalDesc"));
141         } catch (AuthorizationException e) {
142             e.printStackTrace();
143         }
144
145         return mapping.findForward("addInheritanceOK");
146     }
147
148
149     /**
150      * create a new role(Principal).
151      * @param mapping
152      * @param form
153      * @param request
154      * @param response
155      * @return
156      */

157     public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
158
159         DynaActionForm dyna = (DynaActionForm)form;
160         AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER);
161         AuthenticationManager authenticationManager = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER);
162
163         try {
164             RolePrincipal principal = new RolePrincipal((String JavaDoc)dyna.get("principalName"),request.getSession().getServletContext().getServletContextName());
165             authorizationManager.createPrincipal(principal);
166             authenticationManager.createPrincipal(principal);
167         } catch (AuthorizationException e) {
168             logger.error(e.getMessage());
169         } catch (AuthenticationException e) {
170             logger.error(e.getMessage());
171         }
172
173         return mapping.findForward("createPrincipalOK");
174
175     }
176
177     /**
178      * create a new role(Principal).
179      * @param mapping
180      * @param form
181      * @param request
182      * @param response
183      * @return
184      */

185     public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
186
187         DynaActionForm dyna = (DynaActionForm)form;
188         AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER);
189         AuthenticationManager authenticationManager = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER);
190         RolePrincipal principal = new RolePrincipal((String JavaDoc)dyna.get("principalName"),(String JavaDoc)request.getSession().getServletContext().getAttribute(CoreConstants.APPLICATION_NAME));
191         String JavaDoc domainNames = (String JavaDoc)dyna.get("domainNames");
192         String JavaDoc permissionNames = (String JavaDoc)dyna.get("permissionNames");
193         String JavaDoc[] domNames = domainNames.split("#");
194         String JavaDoc[] permNames = permissionNames.split("#");
195         if(!domainNames.equals("")){
196             Set JavaDoc doms = authorizationManager.getDomains(Arrays.asList(domNames));
197             principal.setDomains(doms);
198         }
199         if(!permissionNames.equals("")){
200             Set JavaDoc perms = authorizationManager.getPermissions(Arrays.asList(permNames));
201             principal.setPermissions(perms);
202         }
203
204         try {
205             authorizationManager.updatePrincipal((String JavaDoc)dyna.get("oldPrincipalName"),principal);
206             authenticationManager.updatePrincipal((String JavaDoc)dyna.get("oldPrincipalName"),principal);
207         } catch (AuthorizationException e) {
208             e.printStackTrace();
209         } catch (AuthenticationException e) {
210             e.printStackTrace();
211         }
212
213         return mapping.findForward("updatePrincipalOK");
214
215     }
216
217     /**
218      * create a new role(Principal).
219      * @param mapping
220      * @param form
221      * @param request
222      * @param response
223      * @return
224      */

225     public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
226
227         DynaActionForm dyna = (DynaActionForm)form;
228         AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER);
229         AuthenticationManager authenticationManager = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER);
230         try {
231             authorizationManager.deletePrincipal((new RolePrincipal((String JavaDoc)dyna.get("principalName"),request.getSession().getServletContext().getServletContextName())));
232             authenticationManager.deletePrincipal((new RolePrincipal((String JavaDoc)dyna.get("principalName"),request.getSession().getServletContext().getServletContextName())));
233         } catch (AuthorizationException e) {
234             e.printStackTrace();
235         } catch (AuthenticationException e) {
236             e.printStackTrace();
237         }
238
239         return mapping.findForward("deletePrincipalOK");
240
241     }
242
243     /**
244      * read a role(Principal).
245      * @param mapping
246      * @param form
247      * @param request
248      * @param response
249      * @return
250      */

251     public ActionForward read(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
252
253         DynaActionForm dyna = (DynaActionForm)form;
254         AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER);
255         RolePrincipal principal = null;
256         Set JavaDoc domains = null;
257         Set JavaDoc domainsNotBound = null;
258         try {
259             principal = (RolePrincipal) authorizationManager.readPrincipal((String JavaDoc)dyna.get("principalName"));
260             domains = authorizationManager.listDomains();
261             domainsNotBound = new HashSet JavaDoc(domains);
262         } catch (AuthorizationException e) {
263             logger.error("principal "+(String JavaDoc)dyna.get("principalName")+" cannot be read",e);
264         }
265         domainsNotBound.removeAll(principal.getDomains());
266         List JavaDoc domainsNBList = new ArrayList JavaDoc(domainsNotBound);
267         dyna.set("DomainsNotBound",domainsNBList);
268
269         dyna.set("principal",principal);
270         List JavaDoc domainsList = new ArrayList JavaDoc(domains);
271         dyna.set("Domains",domainsList);
272
273         //permissions not owned by role directly
274
//and not owned by a domain owned by a role
275
Set JavaDoc permissionsNotBound = new HashSet JavaDoc();
276         Iterator JavaDoc itDomainsNB = domainsNotBound.iterator();
277         while(itDomainsNB.hasNext()){
278             Domain domainTmp = (Domain)itDomainsNB.next();
279             try {
280                 permissionsNotBound.add(domainTmp.clone());
281             } catch (CloneNotSupportedException JavaDoc e1) {
282                 logger.error(" domain "+domainTmp+" cannot be cloned",e1);
283             }
284         }
285         Iterator JavaDoc itPermNB = permissionsNotBound.iterator();
286        while(itPermNB.hasNext()){
287            JGPermissionCollection domain = (JGPermissionCollection)itPermNB.next();
288            domain.getPermissions().removeAll(principal.getOrphanedPermissions());
289        }
290        List JavaDoc permissionsNB = new ArrayList JavaDoc(permissionsNotBound);
291
292        dyna.set("permissionsNotBound",permissionsNB);
293        return mapping.findForward("readPrincipalOK");
294
295     }
296
297     /**
298      * clone a role(Principal).
299      * @param mapping
300      * @param form
301      * @param request
302      * @param response
303      * @return
304      */

305     public ActionForward clone(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
306
307         DynaActionForm dyna = (DynaActionForm)form;
308         String JavaDoc principalToClone = (String JavaDoc)dyna.get("principalName");
309         AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER);
310         AuthenticationManager authenticationManager = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER);
311         try {
312             Principal JavaDoc clonedPpal = authorizationManager.clonePrincipal(principalToClone);
313             authenticationManager.createPrincipal(clonedPpal);
314         } catch (AuthorizationException e) {
315             logger.error(e.getMessage());
316         } catch (AuthenticationException e) {
317             logger.error(e.getMessage());
318         }
319         return mapping.findForward("clonePrincipalOK");
320     }
321
322     public ActionForward displayPrincipalGraph(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
323         //load the role hierarchy into a Graph
324
Map JavaDoc vertices = new HashMap JavaDoc();
325         Graph graph = new DirectedGraphImpl();
326
327         try {
328             AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER);
329             Set JavaDoc principals = authorizationManager.listPrincipals();
330
331             //create all vertex and put into map
332
for (Iterator JavaDoc it = principals.iterator(); it.hasNext();) {
333                 RolePrincipal principal = (RolePrincipal) it.next();
334                 String JavaDoc principalName = principal.getLocalName();
335
336                 Vertex vertex = new VertexImpl(principalName);
337                 graph.add(vertex);
338                 vertices.put(principalName, vertex);
339             }
340
341             //reiterate all principals to generate the links between principals
342
for (Iterator JavaDoc it = principals.iterator(); it.hasNext();) {
343                 RolePrincipal principal = (RolePrincipal) it.next();
344                 String JavaDoc principalName = principal.getLocalName();
345                 Vertex ascendantVertex = (Vertex) vertices.get(principalName);
346
347                 for (Iterator JavaDoc it2 = principal.getDescendants().iterator(); it2.hasNext();) {
348                     RolePrincipal principalDesc = (RolePrincipal) it2.next();
349                     String JavaDoc principalDescName = principalDesc.getLocalName();
350                     Vertex descendantVertex = (Vertex) vertices.get(principalDescName);
351
352                     graph.addEdge(ascendantVertex, descendantVertex);
353                 }
354             }
355
356             //paint the graph
357
VisualGraph visualGraph = new VisualGraph();
358             visualGraph.setGraph(graph);
359
360             GraphLayoutManager layoutManager = new StraightLineLayout(visualGraph);
361             visualGraph.setGraphLayoutManager(layoutManager);
362             visualGraph.layout();
363
364             int width = visualGraph.getMaxSize().width + 20;
365             int height = visualGraph.getMaxSize().height + 20;
366
367             BufferedImage JavaDoc bufferedImage = new BufferedImage JavaDoc(width, height ,BufferedImage.TYPE_INT_RGB);
368             Graphics2D JavaDoc graphics2D = bufferedImage.createGraphics();
369             graphics2D.fillRect(0, 0, width, height);
370             visualGraph.paint(graphics2D);
371             graphics2D.dispose();
372
373             String JavaDoc resize = request.getParameter("resize");
374
375             response.setContentType("image/png");
376
377             if (Boolean.valueOf(resize).booleanValue())
378                 ImageIO.write(resize(bufferedImage, 640), "png", response.getOutputStream());
379             else
380                 ImageIO.write(bufferedImage, "png", response.getOutputStream());
381         } catch (Exception JavaDoc e) {
382             e.printStackTrace();
383         }
384
385         return null;
386     }
387
388     /**
389      *
390      * @param src
391      * @param width
392      * @return
393      */

394     private static BufferedImage JavaDoc resize(BufferedImage JavaDoc src, int width) {
395         double d = src.getWidth();
396         double d1 = src.getHeight();
397         double d2 = width;
398         double d3 = d2 / d;
399
400         if (d1 * d3 > d2) {
401             d3 = d2 / d1;
402         }
403
404         if (d3 > 0.8D) {
405             d3 = 1.0D;
406         }
407
408         int j = (int) (d * d3);
409         int k = (int) (d1 * d3);
410
411         AffineTransform JavaDoc tx = new AffineTransform JavaDoc();
412         tx.scale(d3, d3);
413
414         RenderingHints JavaDoc rh = new RenderingHints JavaDoc(RenderingHints.KEY_ANTIALIASING,
415                 RenderingHints.VALUE_ANTIALIAS_ON);
416         rh.put(RenderingHints.KEY_ALPHA_INTERPOLATION,
417                 RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
418         rh.put(RenderingHints.KEY_COLOR_RENDERING,
419                 RenderingHints.VALUE_COLOR_RENDER_QUALITY);
420         rh.put(RenderingHints.KEY_INTERPOLATION,
421                 RenderingHints.VALUE_INTERPOLATION_BICUBIC);
422         rh.put(RenderingHints.KEY_RENDERING,
423                 RenderingHints.VALUE_RENDER_QUALITY);
424         rh.put(RenderingHints.KEY_STROKE_CONTROL,
425                 RenderingHints.VALUE_STROKE_PURE);
426         rh.put(RenderingHints.KEY_TEXT_ANTIALIASING,
427                 RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
428
429         AffineTransformOp JavaDoc op = new AffineTransformOp JavaDoc(tx, rh);
430         BufferedImage JavaDoc biNew = new BufferedImage JavaDoc(j, k, src.getType());
431
432         op.filter(src, biNew);
433
434         return biNew;
435     }
436     
437 }
438
Popular Tags