KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > roller > presentation > website > tags > AuthorizeUserTag


1 package org.roller.presentation.website.tags;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5 import org.apache.struts.config.ForwardConfig;
6 import org.apache.struts.config.ModuleConfig;
7 import org.apache.struts.util.RequestUtils;
8 import org.roller.pojos.UserData;
9 import org.roller.presentation.RollerRequest;
10
11 import java.security.Principal JavaDoc;
12
13 import javax.servlet.ServletContext JavaDoc;
14 import javax.servlet.http.HttpServletRequest JavaDoc;
15 import javax.servlet.http.HttpServletResponse JavaDoc;
16 import javax.servlet.jsp.JspException JavaDoc;
17 import javax.servlet.jsp.tagext.Tag JavaDoc;
18 import javax.servlet.jsp.tagext.TagSupport JavaDoc;
19
20
21 /**
22   * If user is not authorized, forward to specified global forward.
23   * @jsp.tag name="AuthorizeUser"
24   */

25 public class AuthorizeUserTag extends TagSupport JavaDoc
26 {
27     static final long serialVersionUID = 1684786313445066867L;
28     
29     private static Log mLogger = LogFactory.getFactory().getInstance(
30         AuthorizeUserTag.class);
31
32     private String JavaDoc name = null;
33     /** @jsp.attribute required="true" */
34     public String JavaDoc getFailureForward() { return (this.name); }
35     public void setFailureForward(String JavaDoc name) {this.name = name;}
36
37     //-----------------------------------------------------------
38
/**
39      * Defer generation until the end of this tag is encountered.
40      *
41      * @exception JspException if a JSP exception has occurred
42      */

43     public int doStartTag() throws JspException JavaDoc
44     {
45         return (SKIP_BODY);
46     }
47
48     //-----------------------------------------------------------
49
/**
50      * Process start tag.
51      * @return EVAL_SKIP_BODY
52      */

53     public int doEndTag() throws JspException JavaDoc
54     {
55         HttpServletRequest JavaDoc req = null;
56         UserData user = null;
57         try
58         {
59             req = (HttpServletRequest JavaDoc)pageContext.getRequest();
60             user = RollerRequest.getRollerRequest(req).getUser();
61         }
62         catch (Exception JavaDoc e)
63         {
64             mLogger.error("ERROR in tag",e);
65             throw new JspException JavaDoc(e);
66         }
67
68         Principal JavaDoc prince = req.getUserPrincipal();
69         if ( prince == null || !prince.getName().equals( user.getUserName() ) )
70         {
71             ServletContext JavaDoc ctx = req.getSession().getServletContext();
72             ModuleConfig mConfig = RequestUtils.getModuleConfig(req,ctx);
73             ForwardConfig fConfig = mConfig.findForwardConfig(name);
74             if (fConfig==null)
75                 throw new JspException JavaDoc("Forward "+name+"not found");
76             
77             // Forward or redirect to the corresponding actual path
78
String JavaDoc path = fConfig.getPath();
79             if (fConfig.getRedirect())
80             {
81                 HttpServletResponse JavaDoc response =
82                     (HttpServletResponse JavaDoc) pageContext.getResponse();
83                 try
84                 {
85                     response.sendRedirect(response.encodeRedirectURL(path));
86                 }
87                 catch (Exception JavaDoc e)
88                 {
89                   mLogger.error("ERROR in tag",e);
90                   throw new JspException JavaDoc("Error redirecting to forward "+name);
91                 }
92             }
93             else
94             {
95                 try
96                 {
97                     pageContext.forward(path);
98                 }
99                 catch (Exception JavaDoc e)
100                 {
101                     mLogger.error("ERROR in tag",e);
102                     throw new JspException JavaDoc("Error forward to "+name);
103                 }
104             }
105
106             // Skip the remainder of this page
107
return (SKIP_PAGE);
108         }
109         return Tag.SKIP_BODY;
110     }
111
112     //------------------------------------------------------------------------
113
/**
114      * Release any acquired resources.
115      */

116     public void release()
117     {
118         super.release();
119         name = null;
120     }
121 }
122
123
Popular Tags