JSP Custom Tag

最近有一個案子 搭配了 struts2 , 只是用到了部分 Security authorization 的功能,
因此實在是沒必要大費周章的 採用 Spring Security 的功能,
 
於是想重新拾起 Tomcat Realm 的認證機制來用, 
首先設定了  META-INF/context.xml
</div>
<div>&lt;Context debug=&quot;0&quot; privileged=&quot;true&quot;&gt;<br />     &lt;Realm className=&quot;org.apache.catalina.realm.JDBCRealm&quot; connectionName=&quot;username&quot; connectionPassword=&quot;password&quot; connectionURL=&quot;jdbc:mysql://localhost:3306/test&quot; digest=&quot;MD5&quot; driverName=&quot;com.mysql.jdbc.Driver&quot; roleNameCol=&quot;role_name&quot; userCredCol=&quot;user_pass_digest&quot; userNameCol=&quot;user_name&quot; userRoleTable=&quot;user_roles&quot; userTable=&quot;users&quot;/&gt;<br />&lt;/Context&gt;</div>
<div>
其次設定了  web.xml 的認證機制
</div>
<div>&lt;security-constraint&gt;<br />    &lt;display-name&gt;Example Security Constraint&lt;/display-name&gt;<br />    &lt;web-resource-collection&gt;<br />        &lt;web-resource-name&gt;Protected Area&lt;/web-resource-name&gt;<br />        &lt;url-pattern&gt;/protected/*&lt;/url-pattern&gt;<br />        &lt;http-method&gt;DELETE&lt;/http-method&gt;<br />        &lt;http-method&gt;GET&lt;/http-method&gt;<br />        &lt;http-method&gt;POST&lt;/http-method&gt;<br />        &lt;http-method&gt;PUT&lt;/http-method&gt;<br />    &lt;/web-resource-collection&gt;<br />    &lt;auth-constraint&gt;<br />        &lt;role-name&gt;admin&lt;/role-name&gt;<br />        &lt;role-name&gt;manager&lt;/role-name&gt;<br />    &lt;/auth-constraint&gt;<br />&lt;/security-constraint&gt;</div>
<div>&lt;login-config&gt;<br />    &lt;auth-method&gt;FORM&lt;/auth-method&gt;<br />    &lt;realm-name&gt;Example Form-Based Authentication Area&lt;/realm-name&gt;<br />    &lt;form-login-config&gt;<br />        &lt;form-login-page&gt;/protected/login.jsp&lt;/form-login-page&gt;<br />        &lt;form-error-page&gt;/protected/error.jsp&lt;/form-error-page&gt;<br />    &lt;/form-login-config&gt;<br />&lt;/login-config&gt;</div>
<div>&lt;security-role&gt;<br />    &lt;role-name&gt;admin&lt;/role-name&gt;<br />&lt;/security-role&gt;<br />&lt;security-role&gt;<br />    &lt;role-name&gt;manager&lt;/role-name&gt;<br />&lt;/security-role&gt;<br />
 
卻到了 開始寫的時候感覺很不方便, 因為 struts2 已經把 logic 的 Tag 移走了,
我不想 加入 struts 1.2 的 plugin, 卻 只想佔 logic 的判斷 role 的便宜….
於是心一橫, 好吧!!…..自己寫一個 custom tag!!…
首先 寫了 WEB-INF/ custom.tld
</div>
<div>&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?&gt;</div>
<div>&lt;!DOCTYPE taglib<br />        PUBLIC &quot;-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN&quot;<br />        &quot;<a href="http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd</a>&quot;&gt;<br />&lt;taglib&gt;<br /> &lt;tlibversion&gt;1.0&lt;/tlibversion&gt;<br /> &lt;jspversion&gt;1.1&lt;/jspversion&gt;<br /> &lt;shortname&gt;auth&lt;/shortname&gt;</div>
<div> &lt;info&gt;<br />  The Tag By Arthur Fen, <a href="http://www.fjj.idv.tw/">http://www.fjj.idv.tw/</a><br />    &lt;/info&gt;<br /> &lt;tag&gt;<br />  &lt;name&gt;role&lt;/name&gt;<br />  &lt;tagclass&gt;security.RealmAuth&lt;/tagclass&gt;<br />  &lt;bodycontent&gt;empty&lt;/bodycontent&gt;<br />  &lt;attribute&gt;<br />   &lt;name&gt;rolename&lt;/name&gt;<br />   &lt;required&gt;true&lt;/required&gt;<br />  &lt;/attribute&gt;<br /> &lt;/tag&gt;<br />&lt;/taglib&gt;</div>
<div>
 
然後寫了 相對應的 RealmAuth.java
</div>
<div>package security;</div>
<div>import java.io.IOException;</div>
<div>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />import javax.servlet.jsp.JspException;<br />import javax.servlet.jsp.JspWriter;<br />import javax.servlet.jsp.tagext.TagSupport;</div>
<div>public class RealmAuth extends TagSupport &#123;</div>
<div> private String rolename = null;</div>
<div> public int doStartTag() throws JspException &#123;<br />  return SKIP_BODY;<br /> &#125;</div>
<div> public int doEndTag() throws JspException &#123;<br />  // HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();<br />  HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();<br />        <br />  try &#123;<br />   JspWriter out = pageContext.getOut();<br />   out.print( request.isUserInRole(this.rolename) );<br />  &#125;catch (IOException e) &#123;<br />  &#125;<br />  return EVAL_PAGE;<br /> &#125;</div>
<div> public void setRolename(String rolename) &#123;<br />  this.rolename = rolename;<br /> &#125;</div>
<div>&#125;</div>
<div>
 
最後使用在想用的 JSP 上,
</div>
<div>&lt;<a href="mailto:%@taglib">%@taglib</a> prefix=&quot;auth&quot; uri=&quot;/WEB-INF/custom.tld&quot; %&gt;<br />Hello ---&gt;&lt;auth:role rolename=&quot;ipoint-super&quot;/&gt;===&gt;&lt;br/&gt;</div>
<div>
 
大功告成, 下課!!….
 
 
 
 
廣告

About fenjj

Perfect !!??...
本篇發表於 Uncategorized。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s