<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

    SpringAcegi security的配置,和JDK1.5的一些問題

    新的項目沒有開始于是抽空做一個通用一些的Security,后來又考慮到CASSSL的認證問題俺還沒有弄懂,就選擇直接使用Spring的子項目acegi

    acegi是基于Spring的的一個安全框架,支持HTTP基本(basic)驗證、HTTP Request Session驗證、安全通道、ACL等等,功能強大。配置比較簡單,但是還是要寫一下:

    1.   下載Spring Acegijar文件和它的源代碼,在它的binary包中有一個contacts.war,這個是acegi的示例,把它放在tomcatwebapps下直接運行即可,這個是acegi很好的參考。

    2.   acegiHttp Servlet Filter配置在web.xml中。

        <!-- Acegi Security-->

        <filter>

           <filter-name>Acegi Filter Chain Proxy</filter-name>
           <filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>

           <init-param>

               <param-name>targetClass</param-name>

               <param-value>org.acegisecurity.util.FilterChainProxy</param-value>

           </init-param>

        </filter>

        <filter-mapping>

           <filter-name>Acegi Filter Chain Proxy</filter-name>

           <url-pattern>/*</url-pattern>

        </filter-mapping>

    3.   contract示例下的applicationContext-acegi-security.xml放在ClassPath下或WEB-INF下,并且在web.xml中指出該文件的位置:

    <context-param>

           <param-name>contextConfigLocation</param-name>

           <param-value>

           classpath*:/net/chinasam/common/applicationContext-*.xml

           /WEB-INF/ applicationContext-acegi-security.xml</param-value>

        </context-param>

    4.   applicationContext-acegi-security.xml中找到下面的bean定義

    <bean id="jdbcDaoImpl" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">

           <property name="dataSource">

               <ref bean="dataSource" />

           </property>

        </bean>
    可以看到dataSource屬性必須引用一個DataSource,修改這個bean,是之使用一個Spring管理的DataSource實例。JdbcDaoImpl是查詢數據庫的實現類,這個類使用下面的SQL進行查詢:

    "SELECT username,password,enabled FROM users WHERE username = ?";

    "SELECT username,authority FROM authorities WHERE username = ?";

    前者查詢用戶,后者查詢角色,你可以根據實際項目的情況進行修改:設置JdbcDaoImplauthoritiesByUsernameQueryusersByUsernameQuery屬性。這個我沒有設置過,因為我的數據庫結構和這個一樣。Acegi沒有包含用戶管理,關于UserCRUD你必須自己完成,然后通過這兩個屬性告訴acegi如何查詢用戶和角色。

       

    5.   密碼編碼,經常需要給密碼進行編碼,常用的算法包括MD5SHA等,applectionContext –acegi-Security.xml中的配置為:

    <bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.Md5PasswordEncoder" />

    注意,如果使用上述配置,數據庫中的password字段內容必須是實際內容的MD5摘要。

    6.   ApplicationContext-acegi-securtiy.xml缺省的使用HTTP Request驗證,也就是通過普通的HTML標單提交用戶名和口令,所以你必須編寫自己的login頁面,以下是一個例子,注意黑體字部分:

    <form name="login_form"action="<c:urlvalue='j_acegi_security_check'/>"method="POST">

    <table width="241" border="0" cellpadding="0" cellspacing="0" align="center">

     <tr>

        <td><img src="<fmt:messagekey="login.title.img"/>"width="241" height="26"></td>

     </tr>

     <tr>

     <td>

        <table width="241" align="center" cellpadding="0" cellspacing="0">

         

         <tr>

           <td width="1" bgcolor="#D2DBE8"></td>

           <td align="left">&nbsp;<fmt:message key="username"/></td>

           <td align="left">

           <input type="text" class="text" name="j_username"></td>

           <td rowspan="4">

           <img src="<fmt:messagekey="login.button.img"/>"onclick="javascript:login_form.submit()" style="cursor:hand">

           </td>

           <td width="1" bgcolor="#D2DBE8"></td>

         </tr>

         <tr>

           <td width="1" bgcolor="#D2DBE8"></td>

           <td align="left">&nbsp;<fmt:message key="password"/></td>

           <td align="left"><input type="password" class="text" name="j_password"></td>

           <td width="1" bgcolor="#D2DBE8"></td>

         <tr>

           <td width="1" bgcolor="#D2DBE8"></td>

           <td align="left" colspan="3">&nbsp;<fmt:message key="rememberme"/>

           <input type="checkbox" name="_acegi_security_remember_me"></td>

           <td width="1" bgcolor="#D2DBE8"></td>

         </tr>

         </table>

     </td></tr>

     <c:if test="${! empty param.login_error}">

          <tr><td><br>

          <fmt:message key="login.failed"/>

    <%= ((AuthenticationException) session.getAttribute(AbstractProcessingFilter.ACEGI_SECURITY_LAST_EXCEPTION_KEY)).getMessage() %>

          </td>   </tr> </c:if>   </table> </form>

    最后,你需要配置URL權限,關于POJO的方法權限俺還沒有弄懂,而且,如果不提供遠程訪問的情況下,一般來說也不需要。在ApplicationContext-acegi-securtiy.xml找到beanfilterInvocationInterceptor 這個是基于Http Request驗證的權限terceptor,注意設置bjectDefinitionSource屬性,下面是例子,URL的格式是參考ANT的格式,也可以根據正則表達式的寫法:

    <property name="objectDefinitionSource">

               <value>

               <![CDATA[

    CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON

    PATTERN_TYPE_APACHE_ANT

    /index.faces=ROLE_SUPERVISOR,ROLE_ANONYMOUS,ROLE_USER

    /login.jsp*=ROLE_SUPERVISOR,ROLE_ANONYMOUS,ROLE_USER

    /images/*.*=ROLE_SUPERVISOR,ROLE_ANONYMOUS,ROLE_USER

    /common/*.*=ROLE_SUPERVISOR,ROLE_ANONYMOUS,ROLE_USER

    /styles/*.*=ROLE_SUPERVISOR,ROLE_ANONYMOUS,ROLE_USER

    /**=ROLE_USER

                  ]]>

               </value>

    各個權限入口的順序十分重要,注意必須把特殊的URL權限寫在一般的URL權限之前。

    7. Acegi 1.0是基于JDK1.5的,雖然你可以在1.4下使用,但是我還是把我的項目改為JDK1.5,沒成想還出現了一些問題。另外JSTL的也不同了,如果你想使用EL,則必須這樣引用core:
    <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>

    JDK1.4下使用String.replaceFirstreplaceAll方法沒有問題,但是在JDK1.5下卻報IllegalArgumentExceptiongetMessage指出Illegal group arguments,但是單獨寫測試類運行卻沒有任何問題,我只好些了自己的replace算法,可是總覺得應該使用JDK提供的,希望達人指教。

    8.關于如何使用ACL、SSL等驗證,俺需要進一步研究。
     

     

     

     

     

     

     


    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1488354

    posted on 2007-06-14 13:13 蘆葦 閱讀(862) 評論(0)  編輯  收藏 所屬分類: Spring
    主站蜘蛛池模板: 亚洲人和日本人jizz| 免费A级毛片无码A∨中文字幕下载| 亚洲电影免费在线观看| 又爽又高潮的BB视频免费看| 久久久久久精品免费看SSS| 中文字幕永久免费| 国产成人综合亚洲一区| 亚洲 欧洲 自拍 另类 校园| 亚洲一区精品中文字幕| 亚洲一区二区三区无码中文字幕| 日本高清免费不卡在线| aa级一级天堂片免费观看| 人妻无码久久一区二区三区免费| 国产成人无码免费网站| 男女超爽视频免费播放| 亚洲AV无码一区二区三区电影 | 亚洲中文字幕无码av| 亚洲高清免费在线观看| 亚洲∧v久久久无码精品 | 国产中文字幕在线免费观看| 美女被艹免费视频| jizzjizz亚洲日本少妇| 亚洲AV无码精品国产成人| 亚洲精品无码专区在线| 亚洲国产精品无码久久九九大片| 亚洲第一男人天堂| 亚洲欧好州第一的日产suv| 亚洲熟妇无码av另类vr影视 | 69成人免费视频| 99爱在线精品免费观看| 无码国产精品一区二区免费| 啦啦啦完整版免费视频在线观看| 日本xxxx色视频在线观看免费| 一区二区三区在线免费看| 日本一卡精品视频免费| 免费成人福利视频| 国产福利在线免费| 性感美女视频在线观看免费精品 | 亚洲AV女人18毛片水真多| 亚洲JIZZJIZZ妇女| 色吊丝免费观看网站|