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

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

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

    JAVA—咖啡館

    ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術,交流工作經驗,分享JAVA帶來的快樂!本網站部分轉載文章,如果有版權問題請與我聯系。

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

    1、技術目標

     

     

    • 了解并創建Security框架所需數據表
    • 為項目添加Spring Security框架
    • 掌握Security框架配置
    • 應用Security框架為項目的CRUD操作綁定權限

     

     

    注意:本文所用項目為"影片管理",參看

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

     

    2、權限管理需求描述

     

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

     

     

    3、使用準備

     

    3.1)在數據庫中創建6張表

     

    t_admin        管理員帳號表

    t_role權限表

    t_group        權限組表

    t_group_role權限組對應權限表

    t_group_user管理員所屬權限組表

    t_user_role管理員對應權限表

     

    建表SQL語句如下:

     

     

    Sql代碼  收藏代碼
    1. SET FOREIGN_KEY_CHECKS=0;  
    2.     ------------------------------  
    3.     -- 創建管理員帳號表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個管理帳號   
    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.     -- 創建權限表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個操作權限  
    33.     -- ----------------------------  
    34.     INSERT INTO `t_role` VALUES ('1', 'ROLE_ADMIN', '系統管理員', '系統管理員');  
    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.     -- 創建權限組表  
    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個權限組  
    50.     -- ----------------------------  
    51.     INSERT INTO `t_group` VALUES ('1', 'Administrator');  
    52.     INSERT INTO `t_group` VALUES ('2', '影片維護');  
    53.   
    54.     -- ----------------------------  
    55.     -- 創建權限組對應權限表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.     -- 加入權限組與權限的對應關系  
    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.     -- 創建管理員所屬權限組表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.     -- 將管理員加入權限組  
    91.     -- ----------------------------  
    92.     INSERT INTO `t_group_user` VALUES ('1', '1', '1');  
    93.     INSERT INTO `t_group_user` VALUES ('2', '4', '2');  
    94.   
    95.     -- ----------------------------  
    96.     -- 創建管理員對應權限表t_user_role  
    97.     -- 設置該表可跳過權限組,為管理員直接分配權限  
    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)在項目中新增如下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)創建如下包,放置登錄驗證過濾器代碼:

     

    com.xxx.security

     

    3.4)在src下創建Spring配置文件applicationContext-security.xml,內容如下:

     

     

    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.     <!-- 這里進行配置 -->  
    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、站點根路徑下創建登錄頁面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、站點根路徑下創建注銷頁面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. 你已經退出。   
    16. <a href="<c:url value='/login.jsp'/>">點擊這里登錄</a>  
    17. </body>  
    18. </html>  

     

     

    6、站點根路徑下創建HttpSession超時提示頁面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. 你的登錄已經失效,請重新登錄。   
    15. <br />  
    16. <a href="<c:url value='/login.jsp'/>" >  
    17. 點擊這里登錄</a>  
    18. </body>  
    19. </html>  

     

     

    7、在com.xxx.security包下創建登錄驗證過濾器,該過濾器可用于在管理員登錄時進行日志記錄等相關操作,包括兩個類:

     

     

    • 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中加入權限管理配置,如下:

     

     

    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下面的內容,具備access對應權限的-->  
    13.         <intercept-url pattern="/manager/**" access="ROLE_ADMIN,ROLE_UPDATE_FILM,ROLE_DELETE_FILM,ROLE_ADD_FILM" />  
    14.         <!-- 設置登錄過濾器 -->  
    15.         <custom-filter before="FORM_LOGIN_FILTER" ref="authenticationProcessingFilter" />  
    16.         <!-- 登錄表單設置 -->  
    17.         <form-login login-page="/login.jsp"  
    18.             default-target-url="/manager/films.jsp"  
    19.             authentication-failure-url="/login.jsp?error=true" />  
    20.           
    21.         <!-- 登出操作后跳轉到該頁面 -->  
    22.         <logout logout-success-url="/loggedout.jsp"  
    23.             delete-cookies="JSESSIONID" />  
    24.         <remember-me />  
    25.           
    26.         <!-- SESSION超時后跳轉到該頁面 -->  
    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語句查詢登錄帳號對應權限,  
    35.                 users-by-username-query:查詢登錄用戶是否存在  
    36.                 authorities-by-username-query:查詢登錄用戶權限(登錄用戶可以不屬于任何組,從t_user_role表中獲取權限)  
    37.                 group-authorities-by-username-query:查詢登錄用戶所在組的權限  
    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.             <!-- 登錄成功后轉發到該頁面 -->  
    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.         <!-- 登錄失敗后轉發到該頁面 -->  
    80.         <beans:value>/login.jsp?error=true</beans:value>    
    81.     </beans:property>  
    82.     </beans:bean>  
    83.       
    84. </beans:beans>  

     

     

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

    比如,帳號"admin"屬于權限組"Administrator",具備權限"ROLE_ADMIN",登錄后

    可以看到所有操作,帳號"test"屬于權限組"影片維護",具備權限"ROLE_UPDATE_FILM"

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

     

    films.jsp頁面權限分布圖:

     

     

    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權限或者ROLE_ADD_FILM權限可以執行 -->  
    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權限或者ROLE_UPDATE_FILM權限可以執行 -->  
    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權限或者ROLE_DELETE_FILM權限可以執行 -->  
    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 閱讀(465) 評論(0)  編輯  收藏 所屬分類: 【開源技術】
    主站蜘蛛池模板: 国产亚洲美女精品久久| 国产免费久久精品| 成人免费毛片内射美女APP| ww在线观视频免费观看w| 好久久免费视频高清| 中文字幕免费在线观看| 国产成人综合亚洲| 亚洲男人天堂2018av| 日本亚洲欧美色视频在线播放| 免费无遮挡无码视频在线观看| 2022中文字字幕久亚洲| 亚洲第一福利视频| 亚洲欧洲日产国码久在线| EEUSS影院WWW在线观看免费| 一级毛片在线观看免费| 一区二区视频免费观看| 久久亚洲精品无码gv| 亚洲人成77777在线播放网站不卡| 色五月五月丁香亚洲综合网| 亚洲午夜精品久久久久久app| 深夜免费在线视频| 在线精品自拍亚洲第一区| 久久国产精品一区免费下载| 女人18毛片特级一级免费视频| 4虎永免费最新永久免费地址| 91福利免费网站在线观看| 免费国产作爱视频网站| 亚洲国产一级在线观看| 亚洲视频网站在线观看| 免费人成又黄又爽的视频在线电影| 欧洲人成在线免费| 免费jjzz在线播放国产| 色视频色露露永久免费观看| 亚洲国产精品高清久久久| 亚洲av无码成人影院一区| 无码国产精品一区二区免费式芒果| 中文在线观看免费网站| 免费激情网站国产高清第一页| 久久精品免费一区二区| 在线看片韩国免费人成视频| 久久精品夜色噜噜亚洲A∨|