JAVA—咖啡館

          ——?dú)g迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術(shù),交流工作經(jīng)驗(yàn),分享JAVA帶來的快樂!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問題請與我聯(lián)系。

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

          1、技術(shù)目標(biāo)

           

           

          • 了解并創(chuàng)建Security框架所需數(shù)據(jù)表
          • 為項(xiàng)目添加Spring Security框架
          • 掌握Security框架配置
          • 應(yīng)用Security框架為項(xiàng)目的CRUD操作綁定權(quán)限

           

           

          注意:本文所用項(xiàng)目為"影片管理",參看

          http://hotstrong.iteye.com/blog/1156785

           

          2、權(quán)限管理需求描述

           

          • 為系統(tǒng)中的每個(gè)操作定義權(quán)限,如定義4個(gè)權(quán)限:
             1)超級權(quán)限,可以使用所有操作
             2)添加影片權(quán)限
             3)修改影片權(quán)限
             4)刪除影片權(quán)限
          • 為系統(tǒng)設(shè)置管理員帳號、密碼
          • 為系統(tǒng)創(chuàng)建權(quán)限組,每個(gè)權(quán)限組可以配置多個(gè)操作權(quán)限,如創(chuàng)建2個(gè)權(quán)限組:
             1)"Administrator"權(quán)限組,具有超級權(quán)限
             2)"影片維護(hù)"權(quán)限組,具有添加影片、修改影片權(quán)限
          • 可將管理員加入權(quán)限組,管理員登錄后具備權(quán)限組所對應(yīng)操作權(quán)限
          • 管理員可不屬于某權(quán)限組,可為管理員直接分配權(quán)限

           

           

          3、使用準(zhǔn)備

           

          3.1)在數(shù)據(jù)庫中創(chuàng)建6張表

           

          t_admin        管理員帳號表

          t_role權(quán)限表

          t_group        權(quán)限組表

          t_group_role權(quán)限組對應(yīng)權(quán)限表

          t_group_user管理員所屬權(quán)限組表

          t_user_role管理員對應(yīng)權(quán)限表

           

          建表SQL語句如下:

           

           

          Sql代碼  收藏代碼
          1. SET FOREIGN_KEY_CHECKS=0;  
          2.     ------------------------------  
          3.     -- 創(chuàng)建管理員帳號表t_admin  
          4.     -- ----------------------------  
          5.     CREATE TABLE `t_admin` (  
          6.       `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  
          7.       `passwd` varchar(12) NOT NULL DEFAULT '' COMMENT '用戶密碼',  
          8.       `nickname` varchar(20) NOT NULL DEFAULT '' COMMENT '用戶名字',  
          9.       `phoneno` varchar(32) NOT NULL DEFAULT '' COMMENT '電話號碼',  
          10.       PRIMARY KEY (`id`)  
          11.     ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;  
          12.   
          13.     -- ----------------------------  
          14.     -- 添加3個(gè)管理帳號   
          15.     -- ----------------------------  
          16.     INSERT INTO `t_admin` VALUES ('1', 'admin', 'admin', '');  
          17.     INSERT INTO `t_admin` VALUES ('4', '123456', 'test', '');  
          18.     INSERT INTO `t_admin` VALUES ('5', '111111', '111111', '');  
          19.       
          20.     -- ----------------------------  
          21.     -- 創(chuàng)建權(quán)限表t_role  
          22.     -- ----------------------------  
          23.     CREATE TABLE `t_role` (  
          24.       `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  
          25.       `role` varchar(40) NOT NULL DEFAULT '',  
          26.       `descpt` varchar(40) NOT NULL DEFAULT '' COMMENT '角色描述',  
          27.       `category` varchar(40) NOT NULL DEFAULT '' COMMENT '分類',  
          28.       PRIMARY KEY (`id`)  
          29.     ) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8;  
          30.   
          31.     -- ----------------------------  
          32.     -- 加入4個(gè)操作權(quán)限  
          33.     -- ----------------------------  
          34.     INSERT INTO `t_role` VALUES ('1', 'ROLE_ADMIN', '系統(tǒng)管理員', '系統(tǒng)管理員');  
          35.     INSERT INTO `t_role` VALUES ('2', 'ROLE_UPDATE_FILM', '修改', '影片管理');  
          36.     INSERT INTO `t_role` VALUES ('3', 'ROLE_DELETE_FILM', '刪除', '影片管理');  
          37.     INSERT INTO `t_role` VALUES ('4', 'ROLE_ADD_FILM', '添加', '影片管理');  
          38.   
          39.     -- ----------------------------  
          40.     -- 創(chuàng)建權(quán)限組表  
          41.     -- ----------------------------  
          42.     CREATE TABLE `t_group` (  
          43.       `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  
          44.       `groupname` varchar(50) NOT NULL DEFAULT '',  
          45.       PRIMARY KEY (`id`)  
          46.     ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;  
          47.   
          48.     -- ----------------------------  
          49.     -- 添加2個(gè)權(quán)限組  
          50.     -- ----------------------------  
          51.     INSERT INTO `t_group` VALUES ('1', 'Administrator');  
          52.     INSERT INTO `t_group` VALUES ('2', '影片維護(hù)');  
          53.   
          54.     -- ----------------------------  
          55.     -- 創(chuàng)建權(quán)限組對應(yīng)權(quán)限表t_group_role  
          56.     -- ----------------------------  
          57.     CREATE TABLE `t_group_role` (  
          58.       `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  
          59.       `groupid` bigint(20) unsigned NOT NULL,  
          60.       `roleid` bigint(20) unsigned NOT NULL,  
          61.       PRIMARY KEY (`id`),  
          62.       UNIQUE KEY `groupid2` (`groupid`,`roleid`),  
          63.       KEY `roleid` (`roleid`),  
          64.       CONSTRAINT `t_group_role_ibfk_1` FOREIGN KEY (`groupid`) REFERENCES `t_group` (`id`),  
          65.       CONSTRAINT `t_group_role_ibfk_2` FOREIGN KEY (`roleid`) REFERENCES `t_role` (`id`)  
          66.     ) ENGINE=InnoDB AUTO_INCREMENT=83 DEFAULT CHARSET=utf8;  
          67.   
          68.     -- ----------------------------  
          69.     -- 加入權(quán)限組與權(quán)限的對應(yīng)關(guān)系  
          70.     -- ----------------------------  
          71.     INSERT INTO `t_group_role` VALUES ('1', '1', '1');  
          72.     INSERT INTO `t_group_role` VALUES ('2', '2', '2');  
          73.     INSERT INTO `t_group_role` VALUES ('4', '2', '4');  
          74.   
          75.     -- ----------------------------  
          76.     -- 創(chuàng)建管理員所屬權(quán)限組表t_group_user  
          77.     -- ----------------------------  
          78.     CREATE TABLE `t_group_user` (  
          79.       `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  
          80.       `userid` bigint(20) unsigned NOT NULL,  
          81.       `groupid` bigint(20) unsigned NOT NULL,  
          82.       PRIMARY KEY (`id`),  
          83.       KEY `userid` (`userid`),  
          84.       KEY `groupid` (`groupid`),  
          85.       CONSTRAINT `t_group_user_ibfk_2` FOREIGN KEY (`groupid`) REFERENCES `t_group` (`id`),  
          86.       CONSTRAINT `t_group_user_ibfk_3` FOREIGN KEY (`userid`) REFERENCES `t_admin` (`id`)  
          87.     ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;  
          88.   
          89.     -- ----------------------------  
          90.     -- 將管理員加入權(quán)限組  
          91.     -- ----------------------------  
          92.     INSERT INTO `t_group_user` VALUES ('1', '1', '1');  
          93.     INSERT INTO `t_group_user` VALUES ('2', '4', '2');  
          94.   
          95.     -- ----------------------------  
          96.     -- 創(chuàng)建管理員對應(yīng)權(quán)限表t_user_role  
          97.     -- 設(shè)置該表可跳過權(quán)限組,為管理員直接分配權(quán)限  
          98.     -- ----------------------------  
          99.     CREATE TABLE `t_user_role` (  
          100.       `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  
          101.       `userid` bigint(20) unsigned NOT NULL,  
          102.       `roleid` bigint(20) unsigned NOT NULL,  
          103.       PRIMARY KEY (`id`),  
          104.       KEY `userid` (`userid`),  
          105.       KEY `roleid` (`roleid`),  
          106.       CONSTRAINT `t_user_role_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `t_admin` (`id`),  
          107.       CONSTRAINT `t_user_role_ibfk_2` FOREIGN KEY (`roleid`) REFERENCES `t_role` (`id`)  
          108.     ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;  
          109.       

           

          3.2)在項(xiàng)目中新增如下jar包(security框架所需jar包):

           

              注意:以下jar包本文已提供下載

           

          spring-security-config-3.1.0.RC2.jar

          spring-security-core-3.1.0.RC2.jar

          spring-security-taglibs-3.1.0.RC2.jar

          spring-security-web-3.1.0.RC2.jar

           

          3.3)創(chuàng)建如下包,放置登錄驗(yàn)證過濾器代碼:

           

          com.xxx.security

           

          3.4)在src下創(chuàng)建Spring配置文件applicationContext-security.xml,內(nèi)容如下:

           

           

          Xml代碼  收藏代碼
          1. <?xml version="1.0" encoding="UTF-8"?>  
          2.   
          3.     <beans:beans xmlns="http://www.springframework.org/schema/security"  
          4.         xmlns:b="http://www.springframework.org/schema/beans" xmlns:beans="http://www.springframework.org/schema/beans"  
          5.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          6.         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
          7.                             http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">  
          8.       
          9.     <!-- 這里進(jìn)行配置 -->  
          10.       
          11. </beans:beans>  

           

          3.5)在web.xml中加入security配置,如下:

           

           

          Xml代碼  收藏代碼
          1. <?xml version="1.0" encoding="UTF-8"?>  
          2.     <web-app version="2.5"   
          3.         xmlns="http://java.sun.com/xml/ns/javaee"   
          4.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
          5.         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
          6.         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
          7.       <welcome-file-list>  
          8.         <welcome-file>index.jsp</welcome-file>  
          9.       </welcome-file-list>  
          10.         
          11.         <context-param>  
          12.             <param-name>contextConfigLocation</param-name>  
          13.             <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>  
          14.         </context-param>  
          15.           
          16.         <!-- 配置Spring Security -->  
          17.         <filter>  
          18.             <filter-name>springSecurityFilterChain</filter-name>  
          19.             <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  
          20.         </filter>  
          21.         <filter-mapping>  
          22.             <filter-name>springSecurityFilterChain</filter-name>  
          23.             <url-pattern>/*</url-pattern>  
          24.         </filter-mapping>  
          25.           
          26.         <filter>  
          27.             <filter-name>struts2</filter-name>  
          28.             <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
          29.         </filter>  
          30.         <filter-mapping>  
          31.             <filter-name>struts2</filter-name>  
          32.             <url-pattern>/*</url-pattern>  
          33.         </filter-mapping>  
          34.         <listener>  
          35.             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
          36.         </listener>  
          37.     </web-app>  

           

           

          4、站點(diǎn)根路徑下創(chuàng)建登錄頁面login.jsp,代碼如下:

           

           

          Html代碼  收藏代碼
          1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
          2.     pageEncoding="UTF-8"%>  
          3. <%@ taglib prefix="s" uri="/struts-tags"%>  
          4. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
          5. <%   
          6. String path = request.getContextPath();  
          7. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;   
          8. %>  
          9. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
          10. <html xmlns="http://www.w3.org/1999/xhtml">  
          11. <head>  
          12. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
          13. <title>后臺登錄</title>  
          14. </head>  
          15. <body onload="document.loginForm.j_username.focus();">  
          16.     <!-- 登錄表單 -->  
          17.     <form name="loginForm" action="<c:url value='/j_spring_security_check'/>" method="post">  
          18.         <!-- 登錄失敗后,顯示之前的登錄名 -->  
          19.         用戶名:<input type='text' name='j_username' class="txtinput"  
          20.         value='<c:if test="${not empty param.login_error}" >  
          21.         <c:out value="${SPRING_SECURITY_LAST_USERNAME}"/></c:if>/>  
          22.         <br />  
          23.         密碼:<input type='password' name='j_password' class="txtinput" />  
          24.         <br />  
          25.           
          26.         <input type="checkbox" name="_spring_security_remember_me" />  
          27.         &nbsp;保存登錄信息  
          28.         <input name="submit" type="submit" value="提交" />  
          29.         <input name="reset" type="reset" value="重置" />  
          30.           
          31.     </form>  
          32.     <br />  
          33.     <!-- 顯示登錄失敗原因 -->  
          34.     <c:if test="${not empty param.error}">  
          35.         <font color="red"> 登錄失敗<br />  
          36.         <br />  
          37.         原因: <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}" /></font>  
          38.     </c:if>  
          39. </body>  
          40. </html>  

           

           

          5、站點(diǎn)根路徑下創(chuàng)建注銷頁面loggedout.jsp,代碼如下:

           

           

          Html代碼  收藏代碼
          1. <%@page session="false" %>  
          2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
          3. <%@ page pageEncoding="UTF-8"%>  
          4. <%   
          5. String path = request.getContextPath();  
          6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;   
          7. %>  
          8. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
          9. <html xmlns="http://www.w3.org/1999/xhtml">  
          10.   <head>  
          11.       <meta http-equiv="content-type" content="text/html; charset=UTF-8" />  
          12.       <title>登出</title>  
          13.   </head>  
          14. <body>  
          15. 你已經(jīng)退出。   
          16. <a href="<c:url value='/login.jsp'/>">點(diǎn)擊這里登錄</a>  
          17. </body>  
          18. </html>  

           

           

          6、站點(diǎn)根路徑下創(chuàng)建HttpSession超時(shí)提示頁面timeout.jsp,代碼如下:

           

           

          Html代碼  收藏代碼
          1. <%@page session="false" %>  
          2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
          3. <%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>  
          4. <%  
          5. String path = request.getContextPath();  
          6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;   
          7. %>  
          8. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
          9. <html xmlns="http://www.w3.org/1999/xhtml">  
          10.   <head>  
          11.       <title>用戶失效</title>  
          12.   </head>  
          13. <body>  
          14. 你的登錄已經(jīng)失效,請重新登錄。   
          15. <br />  
          16. <a href="<c:url value='/login.jsp'/>" >  
          17. 點(diǎn)擊這里登錄</a>  
          18. </body>  
          19. </html>  

           

           

          7、在com.xxx.security包下創(chuàng)建登錄驗(yàn)證過濾器,該過濾器可用于在管理員登錄時(shí)進(jìn)行日志記錄等相關(guān)操作,包括兩個(gè)類:

           

           

          • LoginUsernamePasswordAuthenticationFilter
          • LoginSuccessHandler

           

          7.1)LoginUsernamePasswordAuthenticationFilter代碼如下:

           

           

          Java代碼  收藏代碼
          1. package com.xxx.security;  
          2. import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;  
          3.   
          4. public class LoginUsernamePasswordAuthenticationFilter extends  
          5.         UsernamePasswordAuthenticationFilter {  
          6.       
          7. }  

           

          7.2)LoginSuccessHandler代碼如下:

           

           

          Java代碼  收藏代碼
          1. package com.xxx.security;  
          2.   
          3. import java.io.IOException;  
          4. import javax.servlet.ServletException;  
          5. import javax.servlet.http.HttpServletRequest;  
          6. import javax.servlet.http.HttpServletResponse;  
          7. import org.springframework.security.core.Authentication;  
          8. import org.springframework.security.core.userdetails.UserDetails;  
          9. import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;  
          10.   
          11. /** 
          12.  * 處理管理員登錄日志 
          13.  * 
          14.  */  
          15. public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler{  
          16.       
          17.     @Override  
          18.     public void onAuthenticationSuccess(HttpServletRequest request,  
          19.             HttpServletResponse response, Authentication authentication) throws IOException,  
          20.             ServletException {  
          21.           
          22.         UserDetails userDetails = (UserDetails)authentication.getPrincipal();  
          23.           
          24.         //輸出登錄提示信息  
          25.         System.out.println("管理員 " + userDetails.getUsername() + " 登錄");  
          26.               
          27.         super.onAuthenticationSuccess(request, response, authentication);  
          28.     }  
          29.       
          30. }  

           

           

          8、在applicationContext-security.xml中加入權(quán)限管理配置,如下:

           

           

          Xml代碼  收藏代碼
          1. <?xml version="1.0" encoding="UTF-8"?>  
          2.   
          3. <beans:beans xmlns="http://www.springframework.org/schema/security"  
          4.     xmlns:b="http://www.springframework.org/schema/beans" xmlns:beans="http://www.springframework.org/schema/beans"  
          5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
          7.                         http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">  
          8.   
          9.     <http >  
          10.         <!-- 不攔截login.jsp -->  
          11.         <intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY" />  
          12.         <!--僅攔截到manager下面的內(nèi)容,具備access對應(yīng)權(quán)限的-->  
          13.         <intercept-url pattern="/manager/**" access="ROLE_ADMIN,ROLE_UPDATE_FILM,ROLE_DELETE_FILM,ROLE_ADD_FILM" />  
          14.         <!-- 設(shè)置登錄過濾器 -->  
          15.         <custom-filter before="FORM_LOGIN_FILTER" ref="authenticationProcessingFilter" />  
          16.         <!-- 登錄表單設(shè)置 -->  
          17.         <form-login login-page="/login.jsp"  
          18.             default-target-url="/manager/films.jsp"  
          19.             authentication-failure-url="/login.jsp?error=true" />  
          20.           
          21.         <!-- 登出操作后跳轉(zhuǎn)到該頁面 -->  
          22.         <logout logout-success-url="/loggedout.jsp"  
          23.             delete-cookies="JSESSIONID" />  
          24.         <remember-me />  
          25.           
          26.         <!-- SESSION超時(shí)后跳轉(zhuǎn)到該頁面 -->  
          27.         <session-management invalid-session-url="/timeout.jsp">  
          28.         </session-management>  
          29.     </http>  
          30.       
          31.     <authentication-manager alias="authenticationManager">  
          32.         <authentication-provider>  
          33.             <!--   
          34.                 直接使用SQL語句查詢登錄帳號對應(yīng)權(quán)限,  
          35.                 users-by-username-query:查詢登錄用戶是否存在  
          36.                 authorities-by-username-query:查詢登錄用戶權(quán)限(登錄用戶可以不屬于任何組,從t_user_role表中獲取權(quán)限)  
          37.                 group-authorities-by-username-query:查詢登錄用戶所在組的權(quán)限  
          38.             -->  
          39.             <jdbc-user-service data-source-ref="dataSource"  
          40.             group-authorities-by-username-query="SELECT g.id,g.groupname,role.role  
          41.                              FROM t_group AS g   
          42.                              LEFT OUTER JOIN t_group_role AS grouprole ON (g.id = grouprole.groupid)  
          43.                              LEFT OUTER JOIN t_role AS role ON (role.id = grouprole.roleid)  
          44.                              LEFT OUTER JOIN t_group_user AS groupuser on (g.id = groupuser.groupid)  
          45.                              LEFT OUTER JOIN t_admin ON (t_admin.id = groupuser.userid)  
          46.                              WHERE t_admin.nickname = ?"  
          47.                 users-by-username-query="SELECT t_admin.nickname AS username,t_admin.passwd as password,'true' AS enabled  
          48.                              FROM t_admin  
          49.                              WHERE t_admin.nickname = ?"  
          50.                 authorities-by-username-query="SELECT t_admin.nickname AS username,role.role as authorities  
          51.                                FROM t_admin   
          52.                                LEFT OUTER JOIN t_user_role AS userrole ON(t_admin.id = userrole.userid)  
          53.                                LEFT OUTER JOIN t_role AS role ON (userrole.roleid = role.id)  
          54.                                WHERE t_admin.nickname = ?" />  
          55.         </authentication-provider>  
          56.     </authentication-manager>  
          57.       
          58.     <!-- 自定義消息 -->  
          59.     <b:bean id="messageSource"  
          60.         class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
          61.         <b:property name="basename"  
          62.             value="classpath:org/springframework/security/messages" />  
          63.     </b:bean>  
          64.       
          65.     <!-- 定制登錄過濾器 -->  
          66.     <beans:bean id="loginSuccessHandler" class="com.xxx.security.LoginSuccessHandler">  
          67.         <b:property name="defaultTargetUrl">  
          68.             <!-- 登錄成功后轉(zhuǎn)發(fā)到該頁面 -->  
          69.             <b:value>/manager/films.jsp</b:value>  
          70.         </b:property>  
          71.     </beans:bean>  
          72.     <beans:bean id="authenticationProcessingFilter" class="com.xxx.security.LoginUsernamePasswordAuthenticationFilter">    
          73.     <beans:property name="authenticationSuccessHandler" ref="loginSuccessHandler"></beans:property>    
          74.     <beans:property name="authenticationFailureHandler" ref="authenticationFailureHandler"></beans:property>    
          75.     <beans:property name="authenticationManager" ref="authenticationManager"></beans:property>    
          76.     </beans:bean>  
          77.     <beans:bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">    
          78.     <beans:property name="defaultFailureUrl">  
          79.         <!-- 登錄失敗后轉(zhuǎn)發(fā)到該頁面 -->  
          80.         <beans:value>/login.jsp?error=true</beans:value>    
          81.     </beans:property>  
          82.     </beans:bean>  
          83.       
          84. </beans:beans>  

           

           

          9、為影片頁面films.jsp定制操作權(quán)限,定制后,不同的帳號登錄會看到不同的操作,

          比如,帳號"admin"屬于權(quán)限組"Administrator",具備權(quán)限"ROLE_ADMIN",登錄后

          可以看到所有操作,帳號"test"屬于權(quán)限組"影片維護(hù)",具備權(quán)限"ROLE_UPDATE_FILM"

          和"ROLE_ADD_FILM",登錄后只能看到"添加影片信息"和"修改"操作

           

          films.jsp頁面權(quán)限分布圖:

           

           

          films.jsp代碼如下:

           

           

          Html代碼  收藏代碼
          1. <%@ page language="java" contentType="text/html; charset=utf-8"  
          2. pageEncoding="utf-8" %>  
          3. <%@taglib uri="/struts-tags" prefix="s" %>  
          4. <%@ taglib prefix="security"  
          5.     uri="http://www.springframework.org/security/tags"%>  
          6. <%  
          7. String path = request.getContextPath();  
          8. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
          9. %>  
          10. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
          11. <html>  
          12.   <head>  
          13.     <title>信息操作</title>  
          14.   </head>  
          15.   <body>  
          16.     <s:form action="/film/findFilm" method="post">  
          17.         <s:submit value=" 獲取所有影片信息 "></s:submit>  
          18.     </s:form>  
          19.     <!-- 添加影片操作,登錄帳號具備ROLE_ADMIN權(quán)限或者ROLE_ADD_FILM權(quán)限可以執(zhí)行 -->  
          20.     <security:authorize ifAnyGranted="ROLE_ADMIN,ROLE_ADD_FILM">  
          21.     <a href="<%=basePath %>manager/insertFilm.jsp">添加影片信息</a><br />   
          22.     </security:authorize>  
          23.       
          24.     <s:if test="filmList != null">  
          25.         <table border="1" width="40%">  
          26.     <tr>  
          27.         <th>序號</th><th>影片名</th><th>操作</th>  
          28.     </tr>   
          29.         <%-- 遍歷影片信息 --%>  
          30.         <s:iterator var="film" value="filmList" status="st">  
          31.             <tr>  
          32.                 <td><s:property value="#st.index+1" /></td>  
          33.                 <td><s:property value="fname" /></td>  
          34.                 <td>  
          35.                       
          36.                     <!-- 修改影片操作,登錄帳號具備ROLE_ADMIN權(quán)限或者ROLE_UPDATE_FILM權(quán)限可以執(zhí)行 -->  
          37.                     <security:authorize ifAnyGranted="ROLE_ADMIN,ROLE_UPDATE_FILM">  
          38.                         <s:url id="detailUrl" value="/film/detailFilm">  
          39.                                     <s:param name="id" value="%{id}"/>  
          40.                                     </s:url>  
          41.                         <s:a href="%{detailUrl}">[修改]</s:a>&nbsp;  
          42.                     </security:authorize>  
          43.                     <!-- 刪除影片操作,登錄帳號具備ROLE_ADMIN權(quán)限或者ROLE_DELETE_FILM權(quán)限可以執(zhí)行 -->  
          44.                     <security:authorize ifAnyGranted="ROLE_ADMIN,ROLE_DELETE_FILM">  
          45.                         <s:url id="deleteUrl" value="/film/deleteFilm">  
          46.                                     <s:param name="id" value="%{id}"/>  
          47.                                     </s:url>  
          48.                         <s:a href="%{deleteUrl}">[刪除]</s:a>  
          49.                     </security:authorize>  
          50.             </td>  
          51.             </tr>  
          52.         </s:iterator>  
          53.     </table>  
          54.     </s:if>  
          55.   </body>  
          56. </html>  

           

           

           

          posted on 2016-03-28 14:01 rogerfan 閱讀(468) 評論(0)  編輯  收藏 所屬分類: 【開源技術(shù)】
          主站蜘蛛池模板: 闵行区| 南通市| 天祝| 同江市| 许昌县| 墨玉县| 正安县| 达尔| 英德市| 镇远县| 会同县| 集安市| 当涂县| 阳信县| 海口市| 香港| 洛南县| 介休市| 收藏| 灵台县| 贺州市| 喜德县| 确山县| 兰溪市| 吉林市| 沙湾县| 老河口市| 麟游县| 确山县| 都兰县| 织金县| 门源| 宁海县| 大关县| 兖州市| 定结县| 杭锦旗| 四会市| 咸阳市| 台东县| 五家渠市|