<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.關于如何使用ACLSSL等驗證,俺需要進一步研究。
     

     

     

     

     

     

     


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

    posted on 2007-06-14 13:13 蘆葦 閱讀(862) 評論(0)  編輯  收藏 所屬分類: Spring
    主站蜘蛛池模板: 2020久久精品亚洲热综合一本| 亚洲成A人片在线观看WWW| va天堂va亚洲va影视中文字幕| 少妇无码一区二区三区免费| 婷婷亚洲综合五月天小说| 久久久精品免费视频| 亚洲邪恶天堂影院在线观看| 日韩免费无码视频一区二区三区 | 热久久精品免费视频| 亚洲欧美日本韩国| 国产人成免费视频| 一级人做人爰a全过程免费视频| 国产91精品一区二区麻豆亚洲| 国产麻豆成人传媒免费观看 | 国产亚洲sss在线播放| 女人张开腿给人桶免费视频| 青草久久精品亚洲综合专区| 亚洲电影日韩精品 | 亚洲性在线看高清h片| 黄页免费在线观看 | 免费人成又黄又爽的视频在线电影| 亚洲国产综合无码一区二区二三区 | **毛片免费观看久久精品| 最新亚洲精品国偷自产在线| 国产成人免费一区二区三区| 三级黄色片免费看| 亚洲国产精品久久网午夜| 在线免费观看韩国a视频| 最近免费mv在线观看动漫| 亚洲乱人伦精品图片| 亚洲精品在线视频| 在线a免费观看最新网站| MM1313亚洲国产精品| 亚洲AV无码专区在线播放中文| 最近中文字幕无免费视频| eeuss免费天堂影院| 久久亚洲精品专区蓝色区| 亚洲综合色在线观看亚洲| 又粗又大又黑又长的免费视频| 色吊丝性永久免费看码| 亚洲白嫩在线观看|