posts - 1,  comments - 0,  trackbacks - 0

          安全管理 -Spring-Security
          簡單例子:
          1:加入spring-Securtiy 的jar包
          2:在web.xml中配置
          <filter>
           <filter-name>springSecurityFilterChain</filter-name>
           <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
          </filter>
          <filter-mapping>
           <filter-name>springSecurityFilterChain</filter-name>
           <url-pattern>/*</url-pattern>
          </filter-mapping>
          3:修改applicationContext-security.xml如下
          <?xml version="1.0" encoding="UTF-8"?>

          <beans xmlns="http://www.springframework.org/schema/beans"
              xmlns:ss="http://www.springframework.org/schema/security"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                                  http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">

           <!--最簡單配置-->
           <ss:http auto-config="true">
            url攔截信息   /** 所有的
            <ss:intercept-url pattern="/**" access="ROLE_ADMIN"/>
           </ss:http>
           <ss:authentication-provider>
             <ss:user-service> 用戶的認證  authorities 權限
            <ss:user password="admin" name="admin" authorities="ROLE_ADMIN"/>
            <!--在第5步完成后添加一個用戶試驗 -->
            輸入用戶名user,密碼user 會出現403 訪問拒絕的錯誤,原因是
            權限ROLE_USER 在ss:intercept-url 沒有攔截任何url
            如果修改上面如下:<ss:intercept-url pattern="/**" access="ROLE_ADMIN,ROLE_USER"/>
            就沒有問題
            <ss:user password="user" name="user" authorities="ROLE_USER"/>
             </ss:user-service>
           </ss:authentication-provider>
          </beans>

          4:啟動項目
          5:http://localhost:8080/fpm/回車
            會自動出現一個spring-security的一個登錄界面(自動生產的登錄界面)
            輸入admin 和admin 就可以進入,否則會提示錯誤信息
          6:登錄界面是系統給的。接下來是一個自定義的登錄界面
          <%@ page contentType="text/html;charset=UTF-8"%>
          <%@ include file="/common/taglibs.jsp"%>


          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
           <title>FPM -- 管理系統</title>
           <%@ include file="/common/metas.jsp"%>
          </head>
          <body>
           action,name 用spring-security的固定格式
            <form name="loginForm" action="${path}/j_spring_security_check" method="POST">
           <table>
           <tr>
            <td>用戶名:</td>
            <td><input type="text" name="j_username"/></td>
           </tr>
           <tr>
            <td>密碼:</td>
            <td><input type="password" name="j_password"/></td>
           </tr>
           <tr>
            <td colspan="2">
            <input type="submit" value="登錄"/></td>
           </tr>
           </table>
            </form>
          </body>

          7:修改applicationContext-security.xml如下
            在<ss:http auto-config="true">中增加如下代碼
            <ss:form-login
           login-page="登錄頁面"
           authentication-failure-url="登錄失敗頁面"
           default-target-url="登錄成功的頁面"
           />
          8:啟動項目,輸入http://localhost:8080/fpm/  發現進去不了
             原因是:web.xml中的過濾器攔截了這個,然后跳轉到form-login中的login-page中
            但是login-page 又被攔截,所以限入了死循環了
            在這句前面加上<ss:intercept-url pattern="/**" access="ROLE_ADMIN"/>
            <ss:intercept-url pattern="登錄頁面" filters="none"/> 表示登錄頁面不被過濾

          9:怎么用數據庫去存儲用戶,密碼(這都是spring-security的默認方式)
           create table users( --用戶表
              username varchar2(50) not null,
              password varchar2(50) not null,
              enabled char(1) not null --當前用戶是否可用 boolean 也可以
          );

          create table authorities ( --權限表
              username varchar2(50) not null, --用戶
              authority varchar2(50) not null --權限
          );

          insert into users(username,password,enabled) values('admin','admin','1');
          insert into users(username,password,enabled) values('user','user','1');

          insert into authorities(username,authority) values('admin','ROLE_ADMIN');
          insert into authorities(username,authority) values('admin','ROLE_USER');
          insert into authorities(username,authority) values('user','ROLE_USER');

          10:修改applicationContext-security.xml如下
            先禁止<ss:authentication-provider> 然后添加如下
           <ss:authentication-provider>
           <ss:jdbc-user-service data-source-ref="spring中數據源名字"/>
           </ss:authentication-provider>

          11:運行項目 訪問數據庫中的用戶 也可以。
          12:修改applicationContext-security.xml如下
          <?xml version="1.0" encoding="UTF-8"?>

          <beans xmlns="http://www.springframework.org/schema/beans"
              xmlns:ss="http://www.springframework.org/schema/security"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                                  http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">

           <ss:http auto-config="true">
            <ss:intercept-url pattern="/common/**" filters="none"/>
            <ss:intercept-url pattern="/css/**" filters="none"/>
            <ss:intercept-url pattern="/images/**" filters="none"/>
            <ss:intercept-url pattern="/js/**" filters="none"/>
            IS_AUTHENTICATED_ANONYMOUSLY 表示匿名權限,所有匿名都來login.action中
            <ss:intercept-url pattern="/login.action" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
            <ss:intercept-url pattern="/company/company.action" access="ROLE_ADMIN"/>
            <ss:intercept-url pattern="/dept/dept.action" access="ROLE_USER"/>
            IS_AUTHENTICATED_FULLY 默認權限,只要登錄就可以訪問(不管是admin還是其他權限)
            <ss:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY"/>
            
            <ss:form-login
             login-page="/login.action"
             authentication-failure-url="/login.action?error=true"
             default-target-url="/"
            />
            
           </ss:http>
           
           <!--<ss:authentication-provider>
            <ss:user-service>
             <ss:user password="admin" name="admin" authorities="ROLE_ADMIN,ROLE_USER"/>
             <ss:user password="user" name="user" authorities="ROLE_USER"/>
            </ss:user-service>
           </ss:authentication-provider>

          -->

           <ss:authentication-provider>
            <ss:jdbc-user-service data-source-ref="dataSource"/>
           </ss:authentication-provider>

          </beans>

          13:前面的都是默認的數據庫
          自定義數據庫用戶權限管理

           create table test_users( --用戶表
              id varchar2(100) not null primary key,
              username varchar2(200) not null,
              password varchar2(200) not null,
              enabled char(1) not null --當前用戶是否可用 boolean 也可以
          );
          數據為
          1  admin admin 1
          2  user user   1
          create table test_role(
           id varchar2(100) not null primary key,
           role_name  varchar2(100) not null
          )
          數據為
          1  ROLE_ADMIN
          2  ROLE_USER
          create table test_user_role(
            user_id varchar2(100),
            role_id varchar2(100)
          )
          數據為
          1 1
          1       2
          2       2

          修改applicaitonContext-security.xml
          <ss:authentication-provider>
            <ss:password-encoder hash="md5"/>
            
            <ss:jdbc-user-service data-source-ref="dataSource"
            users-by-username-query="select username,password,enabled from test_user where username = ?"
            authorities-by-username-query="select u.username,r.role_name authority from test_user u
                     join test_user_role ur on ur.user_id = u.id
                     join test_role r on ur.role_id = r.id
                     where u.username = ?"/>
           </ss:authentication-provider>

          users-by-username-query:由用戶名查詢出用戶
          authorities-by-username-query:由用戶名查詢出權限


          14:對數據加密(md5)

          posted on 2010-07-03 10:55 gjy 閱讀(870) 評論(0)  編輯  收藏 所屬分類: ssh心得筆記

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 宜丰县| 长丰县| 凤庆县| 遂昌县| 邓州市| 晋州市| 宾川县| 曲松县| 泰顺县| 武陟县| 会同县| 阿鲁科尔沁旗| 云浮市| 曲松县| 万源市| 惠东县| 京山县| 桑植县| 剑河县| 汝南县| 夏邑县| 繁峙县| 大荔县| 禹州市| 永济市| 林州市| 台东市| 祁阳县| 哈密市| 巴东县| 黄骅市| 桑日县| 山西省| 濮阳市| 镇远县| 霍城县| 固阳县| 高安市| 淮南市| 漳州市| 万盛区|