Spring Security3配置使用

  使用Spring Security3的几种方法概述

 

    一种是全部利用配置文件,将用户、权限、资源(url)硬编码在xml文件中,已经实现过。

 

    二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置,目前这种方式已经实现。

 

    三种我使用的是第三种 第三种是细分角色和权限,并将用户、角色、权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器,
    并分别实现AccessDecisionManager、InvocationSecurityMetadataSourceService和UserDetailsService,并在配置文件中进行相应配置。

    四种第四种方式我没有试过 。

 

    业务逻辑

    权限代码action为请求路径,权限信息拥有多个权限代码,角色可以拥有多个权限信息, 用户属于用户组,用户组拥有多个角色,用户组必须拥有跟菜单同样权限代码action、页面菜单才能显示 , 最终实现菜单显示与请求路径权限验证。

 

 

 

  在上个项目开发中用到的技术: java1.5 + struts2.1.8 + spring3.0.7 + hibernate3.2.5 + spring security3.1.0 + mysql5.5 + tomcat6.0。

 

    我这里只说明spring security,代码是项目里抽取权限部分出来讲解的, 
    spring security3.1 .0 的11 个jar包,分别为:
    spring-security-acl-3.1 .0 .RELEASE.jar
    spring-security-config-3.1 .0 .RELEASE.jar
    spring-security-core-3.1 .0 .RELEASE.jar
    spring-security-taglibs-3.1 .0 .RELEASE.jar
    spring-security-web-3.1 .0 .RELEASE.jar

    spring-security-aspects-3.1.0.RELEASE.jar

    spring-security-cas-3.1.0.RELEASE.jar

    spring-security-crypto-3.1.0.RELEASE.jar

    spring-security-ldap-3.1.0.RELEASE.jar

    spring-security-openid-3.1.0.RELEASE.jar

    spring-security-remoting-3.1.0.RELEASE.jar 
    当然还有其他项目相关 的jar包,不贴出来了 。

年初讲解过spring security的旧版本Acegi的文章xml配置稍微复杂一些, spring security3配置相对比较简单。

 

Spring Security3 配置使用

 

spring security3 主要实现类。 

spring security3 主要配置文件。

3 web.xml配置文件。 

4 实现流程说明

5 权限sql脚本

6 附件为完整程序与数据库脚本

 

 

 

 

 

1、spring security3 主要实现类 (包含4个关键类):

 

myFilter

 

  (1) MySecurityFilter.java 过滤用户请求

Java代码   收藏代码
  1. package com.taskmanager.web.security;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.Collection;  
  5.   
  6. import javax.servlet.Filter;  
  7. import javax.servlet.FilterChain;  
  8. import javax.servlet.FilterConfig;  
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.ServletRequest;  
  11. import javax.servlet.ServletResponse;  
  12.   
  13. import org.springframework.security.access.ConfigAttribute;  
  14. import org.springframework.security.access.SecurityMetadataSource;  
  15. import org.springframework.security.access.intercept.AbstractSecurityInterceptor;  
  16. import org.springframework.security.access.intercept.InterceptorStatusToken;  
  17. import org.springframework.security.web.FilterInvocation;  
  18. import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;  
  19.   
  20. public class MySecurityFilter extends AbstractSecurityInterceptor implements  
  21.         Filter {  
  22. // 与applicationContext-security.xml里的myFilter的属性securityMetadataSource对应,  
  23.     // 其他的两个组件,已经在AbstractSecurityInterceptor定义  
  24.     private FilterInvocationSecurityMetadataSource securityMetadataSource;  
  25.   
  26.     @Override  
  27.     public SecurityMetadataSource obtainSecurityMetadataSource() {  
  28.         return this.securityMetadataSource;  
  29.     }  
  30.   
  31.     public void doFilter(ServletRequest request, ServletResponse response,  
  32.             FilterChain chain) throws IOException, ServletException {  
  33.         FilterInvocation fi = new FilterInvocation(request, response, chain);  
  34.         invoke(fi);  
  35.     }  
  36.   
  37.     private void invoke(FilterInvocation fi) throws IOException,  
  38.             ServletException {  
  39.         // object为FilterInvocation对象  
  40.         // super.beforeInvocation(fi);//源码  
  41.         // 1.获取请求资源的权限  
  42.          //执行 Collection<ConfigAttribute> attributes =   
  43.                         //securityMetadataSource.getAttributes(fi);  
  44.         // 2.是否拥有权限  
  45.         // this.accessDecisionManager.decide(authenticated, fi, attributes);  
  46.         // this.accessDecisionManager.decide(authenticated, fi, attributes);  
  47.         InterceptorStatusToken token = super.beforeInvocation(fi);  
  48.         try {  
  49.             fi.getChain().doFilter(fi.getRequest(), fi.getResponse());  
  50.         } finally {  
  51.             super.afterInvocation(token, null);  
  52.         }  
  53.     }  
  54.   
  55.     public FilterInvocationSecurityMetadataSource getSecurityMetadataSource() {  
  56.         return securityMetadataSource;  
  57.     }  
  58.   
  59.     public void setSecurityMetadataSource(  
  60.             FilterInvocationSecurityMetadataSource securityMetadataSource) {  
  61.         this.securityMetadataSource = securityMetadataSource;  
  62.     }  
  63.   
  64.     public void init(FilterConfig arg0) throws ServletException {  
  65.         // TODO Auto-generated method stub  
  66.     }  
  67.   
  68.     public void destroy() {  
  69.         // TODO Auto-generated method stub  
  70.   
  71.     }  
  72.   
  73.     @Override  
  74.     public Class<? extends Object> getSecureObjectClass() {  
  75.         //下面的MyAccessDecisionManager的supports方面必须放回true,否则会提醒类型错误    
  76.         return FilterInvocation.class;  
  77.     }  
  78. }  

  核心的InterceptorStatusToken token = super.beforeInvocation(fi);会调用我们定义的accessDecisionManager:decide(Object object)和securityMetadataSource

 

  :getAttributes(Object object)方法。

 

( 2) MySecurityMetadataSource.java 系统启动加载系统权限  用户登入验证权限

Java代码   收藏代码
  1. package com.taskmanager.web.security;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Collection;  
  5. import java.util.HashMap;  
  6. import java.util.Iterator;  
  7. import java.util.List;  
  8. import java.util.Map;  
  9. import java.util.Set;  
  10. import java.util.Map.Entry;  
  11.   
  12. import org.springframework.security.access.ConfigAttribute;  
  13. import org.springframework.security.access.SecurityConfig;  
  14. import org.springframework.security.web.FilterInvocation;  
  15. import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;  
  16. import org.springframework.security.web.util.AntPathRequestMatcher;  
  17. import org.springframework.security.web.util.RequestMatcher;  
  18.   
  19. import com.taskmanager.exception.SystemRunException;  
  20. import com.taskmanager.hibernate.TSysPowerofaction;  
  21. import com.taskmanager.hibernate.TSysPowersystem;  
  22. import com.taskmanager.service.inter.PowerInter;  
  23. //1 加载资源与权限的对应关系    
  24.   
  25. /** 
  26.  * 该过滤器的主要作用就是通过spring著名的IoC生成securityMetadataSource。  
  27.  * securityMetadataSource相当于本包中自定义的MyInvocationSecurityMetadataSourceService。  
  28.  * 该MyInvocationSecurityMetadataSourceService的作用提从数据库提取权限和资源,装配到HashMap中,  
  29.  * 供Spring Security使用,用于权限校验。  
  30.  * @author sparta 11/3/29  
  31.  */  
  32. public class MySecurityMetadataSource implements FilterInvocationSecurityMetadataSource {    
  33.         //由spring调用    
  34.         public MySecurityMetadataSource(PowerInter powerService)   
  35.                throws SystemRunException {    
  36.             this.powerService = powerService;    
  37.             loadResourceDefine();    
  38.         }    
  39.         
  40.         private PowerInter powerService;  
  41.         private static Map<String, Collection<ConfigAttribute>> resourceMap = null;    
  42.         private RequestMatcher pathMatcher;  
  43.         public Collection<ConfigAttribute> getAllConfigAttributes() {    
  44.             return new ArrayList<ConfigAttribute>();  
  45.         }    
  46.         
  47.         public boolean supports(Class<?> clazz) {    
  48.             // TODO Auto-generated method stub    
  49.             return true;    
  50.         }    
  51.         //加载所有资源与权限的关系    
  52.         private void loadResourceDefine() throws SystemRunException {    
  53.             if (resourceMap == null) {  
  54.                 resourceMap = new HashMap<String, Collection<ConfigAttribute>>();  
  55.                 List<TSysPowersystem> resources = this.powerService  
  56.                         .findByTSysPowersystem();  
  57.                  for (TSysPowersystem resource : resources) {  
  58.                 Collection<ConfigAttribute> configAttributes =  
  59.                                     new ArrayList<ConfigAttribute>();  
  60.                 // 以权限名封装为Spring的security Object    
  61.                 //resource.getRoleName() 角色名称 可随意 role_admin  或者 admin  
  62.                 ConfigAttribute configAttribute =   
  63.                                     new SecurityConfig(resource.getRoleName());  
  64.                 configAttributes.add(configAttribute);  
  65.                 //resource.getInterceptUrl() 格式必须是 拦截的包路径    
  66.                 //或者是 比如  /manager/**/*.jh  或者  /system/manager/**/*.jsp  
  67.                 resourceMap.put(resource.getInterceptUrl(), configAttributes);  
  68.                  }  
  69.             }  
  70.                         
  71.         }    
  72.       //返回所请求资源所需要的权限    
  73.         public Collection<ConfigAttribute> getAttributes(Object object)  
  74.                                throws IllegalArgumentException {    
  75.             Iterator<String> it = resourceMap.keySet().iterator();  
  76.             while (it.hasNext()) {  
  77.                 String resURL = it.next();  
  78.                 Iterator<String> ite = resourceMap.keySet().iterator();  
  79.                 pathMatcher = new AntPathRequestMatcher(resURL);  
  80.             if (pathMatcher.matches(((FilterInvocation) object).getRequest())) {  
  81.                     Collection<ConfigAttribute> returnCollection =  
  82.                                           resourceMap.get(resURL);  
  83.                     return returnCollection;  
  84.                 }  
  85.             }  
  86.             return null;  
  87.         }    
  88.         
  89.     }    

 这里的resourcesDao,熟悉Dao设计模式和Spring 注入的朋友应该看得明白。

 

( 3) MyUserDetailServiceImpl.java 点击登入跳转 保存 用户权限 

Java代码   收藏代码
  1. package com.taskmanager.web.security;  
  2.   
  3. import java.util.Collection;  
  4. import java.util.HashSet;  
  5. import java.util.Set;  
  6.   
  7. import org.springframework.security.core.GrantedAuthority;  
  8. import org.springframework.security.core.authority.GrantedAuthorityImpl;  
  9. import org.springframework.security.core.userdetails.User;  
  10. import org.springframework.security.core.userdetails.UserDetails;  
  11. import org.springframework.security.core.userdetails.UserDetailsService;  
  12. import org.springframework.security.core.userdetails.UsernameNotFoundException;  
  13.   
  14. import com.taskmanager.exception.LoginException;  
  15. import com.taskmanager.exception.SystemRunException;  
  16. import com.taskmanager.hibernate.TSysCharacter;  
  17. import com.taskmanager.hibernate.TSysCharofgroup;  
  18. import com.taskmanager.hibernate.TSysPowersystemofchar;  
  19. import com.taskmanager.hibernate.TSysUser;  
  20. import com.taskmanager.hibernate.TSysUsergroup;  
  21. import com.taskmanager.hibernate.TSysUserofusergroup;  
  22. import com.taskmanager.service.inter.UserInter;  
  23.   
  24. public class MyUserDetailServiceImpl implements UserDetailsService {  
  25.   
  26.     UserInter userService;  
  27.     public UserInter getUserService() {  
  28.         return userService;  
  29.     }  
  30.   
  31.     public void setUserService(UserInter userService) {  
  32.         this.userService = userService;  
  33.     }  
  34.   
  35.     // 登入默认会调整到这里  
  36.     public UserDetails loadUserByUsername(String username)  
  37.             throws UsernameNotFoundException {  
  38.         System.out.println("username is " + username);  
  39.         TSysUser users=null;  
  40.         try {  
  41.             users = this.userService.findByUsersLogin(username);  
  42.         } catch (LoginException e) {  
  43.             throw new UsernameNotFoundException(username);  
  44.         } catch (SystemRunException e) {  
  45.             throw new UsernameNotFoundException(username);  
  46.         }  
  47.         if (users == null) {  
  48.             throw new UsernameNotFoundException(username);  
  49.         }else {  
  50.             if(!users.getStatus()){  
  51.                 throw new UsernameNotFoundException("该用户处于锁定状态");  
  52.             }  
  53.         }  
  54.         Collection<GrantedAuthority> grantedAuths = obtionGrantedAuthorities(users);  
  55.   
  56.         boolean enables = true;  
  57.         boolean accountNonExpired = true;  
  58.         boolean credentialsNonExpired = true;  
  59.         boolean accountNonLocked = true;  
  60.         User userdetail = new User(users.getCode(), users.getPassword(),  
  61.                 enables, accountNonExpired, credentialsNonExpired,  
  62.                 accountNonLocked, grantedAuths);  
  63.         return userdetail;  
  64.     }  
  65.   
  66.     // 取得用户的权限  
  67.     private Set<GrantedAuthority> obtionGrantedAuthorities(TSysUser user) {  
  68.         Set<GrantedAuthority> authSet = new HashSet<GrantedAuthority>();  
  69.         //获取用户所属组  
  70.         Set<TSysUserofusergroup> userGroups = user.getTSysUserofusergroups();  
  71.         for(TSysUserofusergroup userGroup : userGroups ){  
  72.             //获取用户所属组 组对象  
  73.             TSysUsergroup usgroup=userGroup.getTSysUsergroup();  
  74.             //获取用户组对应 角色集合  
  75.             Set<TSysCharofgroup> charofgroups=usgroup.getTSysCharofgroups();  
  76.         for (TSysCharofgroup charofgroup : charofgroups) {  
  77.             TSysCharacter character=charofgroup.getTSysCharacter();  
  78.             //获取角色对应权限集合  
  79.             Set<TSysPowersystemofchar>  powerSystemofchars=  
  80.                               character.getTSysPowersystemofchars();  
  81.             for(TSysPowersystemofchar powerofchar : powerSystemofchars){  
  82.                 authSet.add(  
  83.    new GrantedAuthorityImpl(powerofchar.getTSysPowersystem().getRoleName()));  
  84.             }  
  85.         }  
  86.         }  
  87.         return authSet;  
  88.     }  
  89. }  

 

(4) MyAccessDecisionManager.java  验证是否拥有访问的权限 

Java代码   收藏代码
  1. package com.taskmanager.web.security;  
  2.   
  3. import java.util.Collection;  
  4. import java.util.Iterator;  
  5.   
  6. import org.springframework.security.access.AccessDecisionManager;  
  7. import org.springframework.security.access.AccessDeniedException;  
  8. import org.springframework.security.access.ConfigAttribute;  
  9. import org.springframework.security.authentication.InsufficientAuthenticationException;  
  10. import org.springframework.security.core.Authentication;  
  11. import org.springframework.security.core.GrantedAuthority;  
  12. /**  
  13.  *AccessdecisionManager在Spring security中是很重要的。  
  14.  *  
  15.  *在验证部分简略提过了,所有的Authentication实现需要保存在一个GrantedAuthority对象数组中。   
  16.  *这就是赋予给主体的权限。 GrantedAuthority对象通过AuthenticationManager  
  17.  *保存到 Authentication对象里,然后从AccessDecisionManager读出来,进行授权判断。   
  18.  *  
  19.  *Spring Security提供了一些拦截器,来控制对安全对象的访问权限,例如方法调用或web请求。   
  20.  *一个是否允许执行调用的预调用决定,是由AccessDecisionManager实现的。   
  21.  *这个 AccessDecisionManager 被AbstractSecurityInterceptor调用,  
  22.  *它用来作最终访问控制的决定。 这个AccessDecisionManager接口包含三个方法:   
  23.  *  
  24.  void decide(Authentication authentication, Object secureObject,  
  25.     List<ConfigAttributeDefinition> config) throws AccessDeniedException;  
  26.  boolean supports(ConfigAttribute attribute);  
  27.  boolean supports(Class clazz);  
  28.    
  29.   从第一个方法可以看出来,AccessDecisionManager使用方法参数传递所有信息,这好像在认证评估时进行决定。   
  30.   特别是,在真实的安全方法期望调用的时候,传递安全Object启用那些参数。   
  31.   比如,让我们假设安全对象是一个MethodInvocation。   
  32.   很容易为任何Customer参数查询MethodInvocation,  
  33.   然后在AccessDecisionManager里实现一些有序的安全逻辑,来确认主体是否允许在那个客户上操作。   
  34.   如果访问被拒绝,实现将抛出一个AccessDeniedException异常。  
  35.   
  36.   这个 supports(ConfigAttribute) 方法在启动的时候被  
  37.   AbstractSecurityInterceptor调用,来决定AccessDecisionManager  
  38.   是否可以执行传递ConfigAttribute。   
  39.   supports(Class)方法被安全拦截器实现调用,  
  40.   包含安全拦截器将显示的AccessDecisionManager支持安全对象的类型。  
  41.  */    
  42. public class MyAccessDecisionManager implements AccessDecisionManager {    
  43.             
  44.         public void decide(Authentication authentication, Object object,  
  45.             Collection<ConfigAttribute> configAttributes)   
  46.            throws AccessDeniedException, InsufficientAuthenticationException {    
  47.             if(configAttributes == null) {    
  48.                 return;    
  49.             }    
  50.             //所请求的资源拥有的权限(一个资源对多个权限)    
  51.             Iterator<ConfigAttribute> iterator = configAttributes.iterator();    
  52.             while(iterator.hasNext()) {    
  53.                 ConfigAttribute configAttribute = iterator.next();    
  54.                 //访问所请求资源所需要的权限    
  55.                 String needPermission = configAttribute.getAttribute();    
  56.                 System.out.println("needPermission is " + needPermission);   
  57.                 //用户所拥有的权限authentication    
  58.                 for(GrantedAuthority ga : authentication.getAuthorities()) {    
  59.                     if(needPermission.equals(ga.getAuthority())) {    
  60.                         return;    
  61.                     }    
  62.                 }    
  63.             }    
  64.             //没有权限    会跳转到login.jsp页面  
  65.             throw new AccessDeniedException(" 没有权限访问");    
  66.         }    
  67.         
  68.         public boolean supports(ConfigAttribute attribute) {    
  69.             // TODO Auto-generated method stub    
  70.             return true;    
  71.         }    
  72.         
  73.         public boolean supports(Class<?> clazz) {    
  74.             // TODO Auto-generated method stub    
  75.             return true;    
  76.         }    
  77.             
  78.     }    

 

2、spring security3 主要配置文件。

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans:beans xmlns="http://www.springframework.org/schema/security"  
  3.     xmlns:beans="http://www.springframework.org/schema/beans"   
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans   
  6. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
  7. http://www.springframework.org/schema/security   
  8. http://www.springframework.org/schema/security/spring-security-3.1.xsd">  
  9.     <global-method-security pre-post-annotations="enabled">  
  10.     </global-method-security>  
  11.     <!-- 该路径下的资源不用过滤 -->  
  12.     <http pattern="/include/js/**" security="none" />  
  13.     <http pattern="/include/css/**" security="none" />  
  14.     <http pattern="/include/scripts/**" security="none" />  
  15.     <http pattern="/include/jsp/**" security="none" />  
  16.     <http pattern="/images/**" security="none" />  
  17.     <http pattern="/login.jsp" security="none" />  
  18.     <!--auto-config = true 则使用from-login. 如果不使用该属性 则默认为http-basic(没有session).-->  
  19.     <!-- lowercase-comparisons:表示URL比较前先转为小写。-->  
  20.         <!-- path-type:表示使用Apache Ant的匹配模式。-->  
  21.     <!--access-denied-page:访问拒绝时转向的页面。-->  
  22.     <!-- access-decision-manager-ref:指定了自定义的访问策略管理器。-->  
  23.       
  24.     <http use-expressions="true" auto-config="true"  
  25.         access-denied-page="/include/jsp/timeout.jsp">  
  26. <!--login-page:指定登录页面。  -->  
  27. <!-- login-processing-url:指定了客户在登录页面中按下 Sign In 按钮时要访问的 URL。-->  
  28.         <!-- authentication-failure-url:指定了身份验证失败时跳转到的页面。-->  
  29.         <!-- default-target-url:指定了成功进行身份验证和授权后默认呈现给用户的页面。-->  
  30. <!-- always-use-default-target:指定了是否在身份验证通过后总是跳转到default-target-url属性指定的URL。 
  31. -->  
  32.           
  33. <form-login login-page="/login.jsp" default-target-url='/system/default.jsp'  
  34.         always-use-default-target="true" authentication-failure-url="/login.jsp?login_error=1" />  
  35. <!--logout-url:指定了用于响应退出系统请求的URL。其默认值为:/j_spring_security_logout。-->  
  36.         <!-- logout-success-url:退出系统后转向的URL。-->  
  37.         <!-- invalidate-session:指定在退出系统时是否要销毁Session。-->  
  38.         <logout invalidate-session="true" logout-success-url="/login.jsp"  
  39.             logout-url="/j_spring_security_logout" />  
  40.         <!-- 实现免登陆验证 -->  
  41.         <remember-me />  
  42.   
  43.         <!-- max-sessions:允许用户帐号登录的次数。范例限制用户只能登录一次。-->  
  44. <!-- 此值表示:用户第二次登录时,前一次的登录信息都被清空。-->  
  45.  <!--   exception-if-maximum-exceeded:默认为false,-->  
  46. <!-- 当exception-if-maximum-exceeded="true"时系统会拒绝第二次登录。-->  
  47.   
  48.         <session-management invalid-session-url="/login.jsp"  
  49.             session-fixation-protection="none">  
  50.             <concurrency-control max-sessions="1"  
  51.                 error-if-maximum-exceeded="false" />  
  52.         </session-management>  
  53.         <custom-filter ref="myFilter" before="FILTER_SECURITY_INTERCEPTOR" />  
  54.         <session-management  
  55.             session-authentication-strategy-ref="sas" />  
  56.   
  57.     </http>  
  58. <beans:bean id="sas"  
  59. class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">  
  60.         <beans:constructor-arg name="sessionRegistry"  
  61.             ref="sessionRegistry" />  
  62.         <beans:property name="maximumSessions" value="1" />  
  63.         <!-- 防止session攻击 -->  
  64.         <beans:property name="alwaysCreateSession" value="true" />  
  65.         <beans:property name="migrateSessionAttributes" value="false" />  
  66.         <!--  同一个帐号 同时只能一个人登录 -->  
  67.         <beans:property name="exceptionIfMaximumExceeded"  
  68.             value="false" />  
  69.     </beans:bean>  
  70.     <beans:bean id="sessionRegistry"  
  71.         class="org.springframework.security.core.session.SessionRegistryImpl" />  
  72.     <!-- 
  73. 事件监听:实现了ApplicationListener监听接口,包括AuthenticationCredentialsNotFoundEvent 事件,-->  
  74.     <!-- AuthorizationFailureEvent事件,AuthorizedEvent事件, PublicInvocationEvent事件-->  
  75.     <beans:bean  
  76.         class="org.springframework.security.authentication.event.LoggerListener" />  
  77.     <!-- 自定义资源文件   提示信息 -->  
  78.     <beans:bean id="messageSource"  
  79. class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
  80.         <beans:property name="basenames" value="classpath:message_zh_CN">  
  81. </beans:property>  
  82.     </beans:bean>  
  83.     <!-- 配置过滤器 -->  
  84.     <beans:bean id="myFilter"  
  85.         class="com.taskmanager.web.security.MySecurityFilter">  
  86.     <!-- 用户拥有的权限 -->  
  87.     <beans:property name="authenticationManager" ref="myAuthenticationManager" />  
  88.     <!-- 用户是否拥有所请求资源的权限 -->  
  89.     <beans:property name="accessDecisionManager" ref="myAccessDecisionManager" />  
  90.     <!-- 资源与权限对应关系 -->  
  91.     <beans:property name="securityMetadataSource" ref="mySecurityMetadataSource" />  
  92.     </beans:bean>  
  93.     <!-- 实现了UserDetailsService的Bean -->  
  94.     <authentication-manager alias="myAuthenticationManager">  
  95.         <authentication-provider user-service-ref="myUserDetailServiceImpl">  
  96.             <!-- 登入 密码  采用MD5加密 -->  
  97.             <password-encoder hash="md5" ref="passwordEncoder">  
  98.             </password-encoder>  
  99.         </authentication-provider>  
  100.     </authentication-manager>  
  101.     <!-- 验证用户请求资源  是否拥有权限 -->  
  102.     <beans:bean id="myAccessDecisionManager"  
  103.         class="com.taskmanager.web.security.MyAccessDecisionManager">  
  104.     </beans:bean>  
  105.     <!-- 系统运行时加载 系统要拦截的资源   与用户请求时要过滤的资源 -->  
  106.     <beans:bean id="mySecurityMetadataSource"  
  107.         class="com.taskmanager.web.security.MySecurityMetadataSource">  
  108.         <beans:constructor-arg name="powerService" ref="powerService">  
  109. </beans:constructor-arg>  
  110.     </beans:bean>  
  111.     <!-- 获取用户登入角色信息 -->  
  112.     <beans:bean id="myUserDetailServiceImpl"  
  113.         class="com.taskmanager.web.security.MyUserDetailServiceImpl">  
  114.         <beans:property name="userService" ref="userService"></beans:property>  
  115.     </beans:bean>  
  116.   
  117.     <!-- 用户的密码加密或解密 -->  
  118.     <beans:bean id="passwordEncoder"  
  119. class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" />  
  120. </beans:beans>    

 

3、 web.xml配置文件。

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  6.     <context-param>  
  7.         <description>Spring applicationContext</description>  
  8.         <param-name>contextConfigLocation</param-name>  
  9.         <param-value>  
  10.             /WEB-INF/spring/application*.xml  
  11.         </param-value>  
  12.     </context-param>  
  13. <listener>  
  14.         <description>SpringContextLoaderListener</description>  
  15.         <display-name>SpringContextLoaderListener</display-name>  
  16. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  17.     </listener>  
  18. <!-- spring scurity 拦截器 -->  
  19.     <filter>  
  20.         <filter-name>springSecurityFilterChain</filter-name>  
  21.         <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  
  22.     </filter>  
  23.     <filter-mapping>  
  24.         <filter-name>springSecurityFilterChain</filter-name>  
  25.         <url-pattern>*.jh</url-pattern>  
  26.         <url-pattern>*.jsp</url-pattern>  
  27.         <url-pattern>/j_spring_security_check</url-pattern>  
  28.         <url-pattern>/j_spring_security_logout</url-pattern>  
  29.     </filter-mapping>  
 

4、流程

 

 1)容器启动(MySecurityMetadataSource:loadResourceDefine加载系统资源与权限列表)
 2)用户发出请求
 3)过滤器拦截(MySecurityFilter:doFilter)
 4)取得请求资源所需权限(MySecurityMetadataSource:getAttributes)
 5)匹配用户拥有权限和请求权限(MyAccessDecisionManager:decide),如果用户没有相应的权限,

 

     执行第6步,否则执行第7步。
 6)登录
 7)验证并授权(MyUserDetailServiceImpl:loadUserByUsername)

 

5、权限sql脚本

Sql代码   收藏代码
  1. /*  
  2. Navicat MySQL Data Transfer  
  3.   
  4. Source Server         : mysql  
  5. Source Server Version : 50015  
  6. Source Host           : localhost:8036  
  7. Source Database       : taskmanager  
  8.   
  9. Target Server Type    : MYSQL  
  10. Target Server Version : 50015  
  11. File Encoding         : 65001  
  12.   
  13. Date: 2012-12-26 17:26:38  
  14. */  
  15.   
  16. SET FOREIGN_KEY_CHECKS=0;  
  17. -- ----------------------------  
  18. -- Table structure for `s_dict`  
  19. -- ----------------------------  
  20. DROP TABLE IF EXISTS `s_dict`;  
  21. CREATE TABLE `s_dict` (  
  22.   `ID` int(50) NOT NULL auto_increment,  
  23.   `DictType` varchar(10) NOT NULL,  
  24.   `Code` varchar(20) NOT NULL,  
  25.   `Namevarchar(50) NOT NULL,  
  26.   `ParentID` varchar(20) default NULL,  
  27.   PRIMARY KEY  (`ID`)  
  28. ) ENGINE=InnoDB DEFAULT CHARSET=gbk;  
  29.   
  30.   
  31.   
  32. -- ----------------------------  
  33. -- Table structure for `t_sys_character`  
  34. -- ----------------------------  
  35. DROP TABLE IF EXISTS `t_sys_character`;  
  36. CREATE TABLE `t_sys_character` (  
  37.   `ID` varchar(50) NOT NULL COMMENT '角色ID',  
  38.   `NAMEvarchar(30) NOT NULL COMMENT '角色名称',  
  39.   `DESCRIPT` varchar(200) default NULL COMMENT '角色描述',  
  40.   `STATUS` decimal(1,0) NOT NULL default '1' COMMENT '菜单状态',  
  41.   `MODPERSON` varchar(50) default NULL COMMENT '最后修改人',  
  42.   `MODTIME` timestamp NULL default NULL COMMENT '最后修改时间',  
  43.   `REMARK` varchar(100) default NULL COMMENT '备注',  
  44.   `SEQID` decimal(12,0) default NULL COMMENT '顺序号',  
  45.   PRIMARY KEY  (`ID`)  
  46. ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='角色表';  
  47.   
  48. -- ----------------------------  
  49. -- Records of t_sys_character  
  50. -- ----------------------------  
  51. INSERT INTO t_sys_character VALUES ('297ef0cb3915b16a013915c7eb112312''系统管理员''系统管理员1''1''999999999999999''2012-09-03 14:03:25'''null);  
  52. INSERT INTO t_sys_character VALUES ('8a8a9691396b237101396b44825a0001''分发任务''任务分发''1''999999999999999''2012-09-02 15:55:12'''null);  
  53. INSERT INTO t_sys_character VALUES ('8a8a9691396b237101396b44aa060002''任务接受''任务接受''1''999999999999999''2012-09-02 15:55:39'''null);  
  54. INSERT INTO t_sys_character VALUES ('8a8a9691396b237101396b55f45b0017''任务审核''任务审核''1''999999999999999''2012-09-02 15:55:57'''null);  
  55. INSERT INTO t_sys_character VALUES ('8a8a9691398b2dc201398b2f0c400001''测试''测试''1''999999999999999''2012-09-03 16:11:19'nullnull);  
  56.   
  57. -- ----------------------------  
  58. -- Table structure for `t_sys_charofgroup`  
  59. -- ----------------------------  
  60. DROP TABLE IF EXISTS `t_sys_charofgroup`;  
  61. CREATE TABLE `t_sys_charofgroup` (  
  62.   `ID` varchar(50) NOT NULL COMMENT 'ID',  
  63.   `GROUPID` varchar(50) NOT NULL COMMENT '用户组ID',  
  64.   `CHARID` varchar(50) NOT NULL COMMENT '角色ID',  
  65.   `STATUS` decimal(1,0) NOT NULL default '1' COMMENT '是否有效',  
  66.   `MODPERSON` varchar(50) default NULL COMMENT '最后修改人',  
  67.   `MODTIME` timestamp NULL default NULL COMMENT '最后修改时间',  
  68.   `REMARK` varchar(100) default NULL COMMENT '备注',  
  69.   PRIMARY KEY  (`ID`),  
  70.   KEY `t_sys_charofgroup_groupid` (`GROUPID`),  
  71.   KEY `t_sys_charofgroup_charid` (`CHARID`),  
  72.   CONSTRAINT `t_sys_charofgroup_charid` FOREIGN KEY (`CHARID`) REFERENCES `t_sys_character` (`ID`) ON DELETE CASCADE,  
  73.   CONSTRAINT `t_sys_charofgroup_groupid` FOREIGN KEY (`GROUPID`) REFERENCES `t_sys_usergroup` (`ID`) ON DELETE CASCADE  
  74. ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='用户组角色表';  
  75.   
  76. -- ----------------------------  
  77. -- Records of t_sys_charofgroup  
  78. -- ----------------------------  
  79. INSERT INTO t_sys_charofgroup VALUES ('8a8a9691396b237101396b4bd0c6000a''8a8a9691396b237101396b4b98be0009''8a8a9691396b237101396b44aa060002''1''999999999999999''2012-08-28 11:34:54'null);  
  80. INSERT INTO t_sys_charofgroup VALUES ('8a8a9691396b237101396b4bebb0000b''8a8a9691396b237101396b4b819c0008''8a8a9691396b237101396b44825a0001''1''999999999999999''2012-08-28 11:35:01'null);  
  81. INSERT INTO t_sys_charofgroup VALUES ('8a8a9691396b237101396b594d2a001e''1234567890''297ef0cb3915b16a013915c7eb112312''1''999999999999999''2012-08-28 11:49:38'null);  
  82. INSERT INTO t_sys_charofgroup VALUES ('8a8a9691396b237101396b5ec80f0022''8a8a9691396b237101396b5ea8230021''8a8a9691396b237101396b55f45b0017''1''999999999999999''2012-08-28 11:55:37'null);  
  83.   
  84. -- ----------------------------  
  85. -- Table structure for `t_sys_department`  
  86. -- ----------------------------  
  87. DROP TABLE IF EXISTS `t_sys_department`;  
  88. CREATE TABLE `t_sys_department` (  
  89.   `ID` varchar(50) NOT NULL COMMENT 'ID',  
  90.   `ZJJGDM` varchar(9) default NULL COMMENT '部门组织机构代码',  
  91.   `CODE` varchar(20) NOT NULL COMMENT '部门简码',  
  92.   `ABBRNAME` varchar(30) NOT NULL COMMENT '是否股室',  
  93.   `NAMEvarchar(60) NOT NULL COMMENT '部门全体',  
  94.   `CHIEF` varchar(50) default NULL COMMENT '部门负责人名称',  
  95.   `INNET` decimal(1,0) default '1' COMMENT '是否在网',  
  96.   `ORDERNO` decimal(6,0) default NULL COMMENT '排列顺序',  
  97.   `STATUS` decimal(1,0) default '1' COMMENT '是否有效',  
  98.   `MODPERSON` varchar(50) default NULL COMMENT '最后修改人',  
  99.   `MODTIME` timestamp NULL default NULL COMMENT '最后修改时间',  
  100.   `OTHERS` varchar(50) default NULL COMMENT '备注',  
  101.   `ISENFOREORG` decimal(1,0) default '1' COMMENT '是否行政审批部门',  
  102.   `WEBSITENAME` varchar(100) default NULL COMMENT '门户网站名称',  
  103.   `WEBSITEADDR` varchar(200) default NULL COMMENT '门户网站地址',  
  104.   `XZQHID` varchar(20) default NULL COMMENT '行政区划ID',  
  105.   `JGGXSBM` varchar(4) default NULL COMMENT '监管关系识别码',  
  106.   `layer` int(11) NOT NULL default '1',  
  107.   `PARENTID` varchar(50) default NULL COMMENT '上级部门ID',  
  108.   PRIMARY KEY  (`ID`)  
  109. ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='部门信息表';  
  110.   
  111. -- ----------------------------  
  112. -- Records of t_sys_department  
  113. -- ----------------------------  
  114. INSERT INTO t_sys_department VALUES ('297ef0cb391b4ce301391b4e3d8e0001'null'123''否''123''999999999999999''1''123''0''999999999999999''2012-10-08 17:45:08'nullnullnull'123'nullnull'2''297ef0cb391b4ce301391b4e3d8e6530');  
  115. INSERT INTO t_sys_department VALUES ('297ef0cb391b4ce301391b4e3d8e6530'null'gly''是''管理员部门''8a8a9691396b237101396b5f73ef0023''1''99''1''999999999999999''2012-09-24 14:04:11'nullnullnull''nullnull'1''');  
  116.   
  117. -- ----------------------------  
  118. -- Table structure for `t_sys_duty`  
  119. -- ----------------------------  
  120. DROP TABLE IF EXISTS `t_sys_duty`;  
  121. CREATE TABLE `t_sys_duty` (  
  122.   `id` varchar(50) NOT NULL COMMENT '职位代码',  
  123.   `namevarchar(20) NOT NULL COMMENT '职位名称',  
  124.   `ORDERNO` int(3) default NULL COMMENT '排序号',  
  125.   PRIMARY KEY  (`id`)  
  126. ) ENGINE=InnoDB DEFAULT CHARSET=gbk;  
  127.   
  128. -- ----------------------------  
  129. -- Records of t_sys_duty  
  130. -- ----------------------------  
  131. INSERT INTO t_sys_duty VALUES ('0001''办事员''1');  
  132. INSERT INTO t_sys_duty VALUES ('0002''科员''15');  
  133. INSERT INTO t_sys_duty VALUES ('0003''站长''16');  
  134.   
  135. -- ----------------------------  
  136. -- Table structure for `t_sys_menu`  
  137. -- ----------------------------  
  138. DROP TABLE IF EXISTS `t_sys_menu`;  
  139. CREATE TABLE `t_sys_menu` (  
  140.   `ID` varchar(50) NOT NULL COMMENT 'ID',  
  141.   `NAMEvarchar(30) NOT NULL COMMENT '菜单名称',  
  142.   `DESCRIPT` varchar(200) default NULL COMMENT '描述',  
  143.   `LAYER` int(1) NOT NULL default '1' COMMENT '层次,只会有1、2、3、4、5'';',  
  144.   `PARENTID` varchar(50) default NULL COMMENT '父菜单ID',  
  145.   `ACTIONNAME` varchar(100) default NULL COMMENT '响应此菜单的ACTION ,只有此菜单作为末级菜单时才填写',  
  146.   `ORDERNO` decimal(3,0) NOT NULL default '0' COMMENT '排列次序',  
  147.   `STATUS` decimal(1,0) NOT NULL default '1' COMMENT '是否有效',  
  148.   `MODPERSON` varchar(50) default NULL COMMENT '最后修改人',  
  149.   `MODTIME` timestamp NULL default NULL COMMENT '最后修改时间',  
  150.   `REMARK` varchar(100) default NULL COMMENT '备注',  
  151.   `SYSTEM` decimal(1,0) NOT NULL default '0' COMMENT '菜单所属系统',  
  152.   `PARAMETER` varchar(50) default NULL COMMENT '链接此菜单的参数',  
  153.   PRIMARY KEY  (`ID`)  
  154. ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='菜单表';  
  155.   
  156. -- ----------------------------  
  157. -- Records of t_sys_menu  
  158. -- ----------------------------  
  159. INSERT INTO t_sys_menu VALUES ('20050909150915816077''权限代码管理''''2''2006062709371100003''/manager/power/list.jh''2''1''999999999999999''2012-08-18 17:47:53''''0''');  
  160. INSERT INTO t_sys_menu VALUES ('20050909150953452259''系统管理''系统管理''1''''''0''0''999999999999999''2012-08-17 16:38:14''''0''');  
  161. INSERT INTO t_sys_menu VALUES ('20050909679021123458''部门用户管理''''2''2006062709371100003''/manager/user/list.jh''6''1''999999999999999''2012-08-18 17:48:01''''0''');  
  162. INSERT INTO t_sys_menu VALUES ('20050916100910655954''部门用户组管理''''2''2006062709371100003''/manager/usergroup/list.jh''5''1''999999999999999''2012-08-18 17:48:10''''0''');  
  163. INSERT INTO t_sys_menu VALUES ('2006042709371511122''角色权限管理''角色权限管理''2''2006062709371100003''/manager/character/list.jh''4''1''999999999999999''2012-08-18 17:48:20''''0''');  
  164. INSERT INTO t_sys_menu VALUES ('2006051180061800000''个人设置''个人设置''1''''''15''1''999999999999999''2012-08-14 21:50:03''''0''');  
  165. INSERT INTO t_sys_menu VALUES ('2006051180061800090''修改密码''修改密码''2''2006051180061800000''/manager/user/pass.jh''7''1''999999999999999''2012-08-18 17:48:45''''0''');  
  166. INSERT INTO t_sys_menu VALUES ('2006061909095300001''系统菜单管理''系统菜单管理''2''2006062709371100003''/manager/menu/list.jh''3''1''999999999999999''2012-08-18 17:48:52''''0''');  
  167. INSERT INTO t_sys_menu VALUES ('2006062709371100003''系统管理''系统管理''1''''''1''1''999999999999999''2012-08-17 16:21:38''系统管理''0''');  
  168. INSERT INTO t_sys_menu VALUES ('297ef0cb3913a1ff013913ac623d0001''部门管理''部门管理''2''2006062709371100003''/manager/department/list.jh''13''1''999999999999999''2012-08-18 17:49:04''部门管理''0''');  
  169. INSERT INTO t_sys_menu VALUES ('402880013956bf7e01395707b2050001''审核''任务审核''2''8a8a96913933a87f013933b0be1f0001''/case/auditList.jh''18''1''999999999999999''2012-08-24 13:12:00''''0''');  
  170. INSERT INTO t_sys_menu VALUES ('402880013956bf7e01395707ef1e0002''完成''任务完成''2''8a8a96913933a87f013933b0be1f0001''/case/fulfilList.jh''19''0''999999999999999''2012-09-24 17:01:04''''0''');  
  171. INSERT INTO t_sys_menu VALUES ('40288001397655b80139765885070001''查询''任务查询''2''8a8a96913933a87f013933b0be1f0001''/case/queryList.jh''20''1''999999999999999''2012-08-30 15:09:04''''0''');  
  172. INSERT INTO t_sys_menu VALUES ('40288001397655b80139765921080002''统计''任务统计''2''8a8a96913933a87f013933b0be1f0001''/case/statisticsList.jh''21''1''999999999999999''2012-08-30 15:11:54''''0''');  
  173. INSERT INTO t_sys_menu VALUES ('8a8a9691390a5c7001390a6703e70003''安全退出''安全退出''2''2006051180061800000''/j_spring_security_logout''11''1''999999999999999''2012-08-09 16:01:27''''0''');  
  174. INSERT INTO t_sys_menu VALUES ('8a8a96913933a87f013933b0be1f0001''任务管理''任务管理''1''''''0''1''999999999999999''2012-08-17 16:38:27''任务管理''0''');  
  175. INSERT INTO t_sys_menu VALUES ('8a8a96913933a87f013933b4c32d0002''创建''创建任务''2''8a8a96913933a87f013933b0be1f0001''/case/createCase.jh''15''0''999999999999999''2012-09-21 22:45:17''创建新任务''0''');  
  176. INSERT INTO t_sys_menu VALUES ('8a8a96913933a87f013933bdd022000b''接收''接收任务''2''8a8a96913933a87f013933b0be1f0001''/case/receiveCase.jh''16''1''999999999999999''2012-08-18 17:49:30''''0''');  
  177. INSERT INTO t_sys_menu VALUES ('8a8a9691394d77c001394da115300005''发布''分发任务''2''8a8a96913933a87f013933b0be1f0001''/case/distributionCase.jh''17''1''999999999999999''2012-08-22 17:20:48''分发任务''0''');  
  178. INSERT INTO t_sys_menu VALUES ('8a8a9691398ad08401398ad2adf20001''系统权限管理''系统权限管理''2''2006062709371100003''/manager/powerSystem/list.jh''4''1''999999999999999''2012-09-03 14:30:26''''0''');  
  179.   
  180. -- ----------------------------  
  181. -- Table structure for `t_sys_power`  
  182. -- ----------------------------  
  183. DROP TABLE IF EXISTS `t_sys_power`;  
  184. CREATE TABLE `t_sys_power` (  
  185.   `ID` varchar(50) NOT NULL COMMENT '权限ID',  
  186.   `NAMEvarchar(30) NOT NULL COMMENT '权限名称',  
  187.   `DESCRIPT` varchar(200) default NULL COMMENT '描述',  
  188.   `STATUS` decimal(1,0) NOT NULL default '1' COMMENT '是否有效',  
  189.   `ISPUBLIC` decimal(1,0) default '0' COMMENT '是否公共权限',  
  190.   `MODPERSON` varchar(50) default NULL COMMENT '最后修改人',  
  191.   `MODTIME` timestamp NULL default NULL COMMENT '最后修改时间',  
  192.   `REMARK` varchar(100) default NULL COMMENT '备注',  
  193.   PRIMARY KEY  (`ID`)  
  194. ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='权限代码表';  
  195.   
  196. -- ----------------------------  
  197. -- Records of t_sys_power  
  198. -- ----------------------------  
  199. INSERT INTO t_sys_power VALUES ('200512012106555''系统管理部门用户管理''系统管理部门用户管理''1''1''999999999999999''2012-08-14 21:02:38''');  
  200. INSERT INTO t_sys_power VALUES ('8a8a96913933a87f013933b6c0f10003''任务分发组''任务分发组的全新''1''1''999999999999999''2012-08-17 16:32:58'null);  
  201. INSERT INTO t_sys_power VALUES ('8a8a96913933a87f013933b768ba0004''公共权限''登入者通用的权限''1''1''999999999999999''2012-08-17 16:33:41'null);  
  202. INSERT INTO t_sys_power VALUES ('8a8a9691396b237101396b45cf5c0003''任务接受组''任务接受组''1''1''999999999999999''2012-08-28 11:28:20'null);  
  203. INSERT INTO t_sys_power VALUES ('8a8a9691396b237101396b523c350012''任务审核''''1''1''999999999999999''2012-08-28 11:41:55'null);  
  204.   
  205. -- ----------------------------  
  206. -- Table structure for `t_sys_powerofaction`  
  207. -- ----------------------------  
  208. DROP TABLE IF EXISTS `t_sys_powerofaction`;  
  209. CREATE TABLE `t_sys_powerofaction` (  
  210.   `ID` varchar(50) NOT NULL COMMENT 'ID',  
  211.   `POWERID` varchar(50) NOT NULL COMMENT '权限ID',  
  212.   `ACTIONNAME` varchar(100) NOT NULL COMMENT '权限对应的ACTION名称',  
  213.   `DESCRIPT` varchar(200) default NULL COMMENT '描述',  
  214.   `STATUS` decimal(1,0) NOT NULL default '1' COMMENT '是否有效',  
  215.   `MODPERSON` varchar(50) default NULL COMMENT '最后修改人',  
  216.   `MODTIME` timestamp NULL default NULL COMMENT '最后修改时间',  
  217.   `REMARK` varchar(100) default NULL COMMENT '备注',  
  218.   PRIMARY KEY  (`ID`),  
  219.   KEY `t_sys_powerofaction_id` (`POWERID`),  
  220.   KEY `t_sys_powerofaction_prid` (`POWERID`),  
  221.   CONSTRAINT `t_sys_powerofaction_prid` FOREIGN KEY (`POWERID`) REFERENCES `t_sys_power` (`ID`) ON DELETE CASCADE ON UPDATE NO ACTION  
  222. ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='权限对应ACTION表';  
  223.   
  224. -- ----------------------------  
  225. -- Records of t_sys_powerofaction  
  226. -- ----------------------------  
  227. INSERT INTO t_sys_powerofaction VALUES ('200512012102112''200512012106555''/manager/power/list.jh''权限代码管理''1''999999999999999''2012-08-18 17:46:27'null);  
  228. INSERT INTO t_sys_powerofaction VALUES ('200512012197343''200512012106555''/manager/menu/list.jh''菜单管理''1''999999999999999''2012-08-18 17:50:23'null);  
  229. INSERT INTO t_sys_powerofaction VALUES ('200512012197349''200512012106555''/manager/character/list.jh''角色权限管理''1''999999999999999''2012-08-18 17:50:34'null);  
  230. INSERT INTO t_sys_powerofaction VALUES ('200512012412244''200512012106555''/manager/user/list.jh''部门用户管理''1''999999999999999''2012-08-18 17:50:40'null);  
  231. INSERT INTO t_sys_powerofaction VALUES ('200512012435444''200512012106555''/manager/usergroup/list.jh''部门用户组管理''1''999999999999999''2012-08-18 17:50:47'null);  
  232. INSERT INTO t_sys_powerofaction VALUES ('297ef0cb3913a1ff013913ad56520002''200512012106555''/manager/department/list.jh''部门管理''1''999999999999999''2012-08-18 17:50:56'null);  
  233. INSERT INTO t_sys_powerofaction VALUES ('40288001397655b80139765d3f990003''8a8a96913933a87f013933b768ba0004''/case/queryList.jh''任务查询''1''999999999999999''2012-08-30 15:09:46'null);  
  234. INSERT INTO t_sys_powerofaction VALUES ('40288001397655b80139765ea8ce0004''8a8a96913933a87f013933b768ba0004''/case/statisticsList.jh''任务统计''1''999999999999999''2012-08-30 15:11:18'null);  
  235. INSERT INTO t_sys_powerofaction VALUES ('8a8a96913933a87f013933b8268c0005''8a8a96913933a87f013933b768ba0004''/system/default.jsp''系统默认首页''1''999999999999999''2012-08-20 13:09:49'null);  
  236. INSERT INTO t_sys_powerofaction VALUES ('8a8a96913933a87f013933b8b05d0006''8a8a96913933a87f013933b768ba0004''/manager/user/pass.jh''修改密码''1''999999999999999''2012-08-18 17:52:09'null);  
  237. INSERT INTO t_sys_powerofaction VALUES ('8a8a96913933a87f013933b91adf0007''8a8a96913933a87f013933b6c0f10003''/case/createCase.jh''创建任务''1''999999999999999''2012-08-18 17:51:19'null);  
  238. INSERT INTO t_sys_powerofaction VALUES ('8a8a9691394d77c001394da301500006''8a8a96913933a87f013933b6c0f10003''/case/distributionCase.jh''任务分发''1''999999999999999''2012-08-22 17:21:31'null);  
  239. INSERT INTO t_sys_powerofaction VALUES ('8a8a9691396b237101396b469b660004''8a8a9691396b237101396b45cf5c0003''/case/receiveCase.jh''任务接受''1''999999999999999''2012-08-28 11:29:13'null);  
  240. INSERT INTO t_sys_powerofaction VALUES ('8a8a9691396b237101396b47605c0005''8a8a9691396b237101396b45cf5c0003''/case/fulfilList.jh''任务完成''1''999999999999999''2012-08-28 11:30:03'null);  
  241. INSERT INTO t_sys_powerofaction VALUES ('8a8a9691396b237101396b52745c0013''8a8a9691396b237101396b523c350012''/case/auditList.jh''任务审核''1''999999999999999''2012-08-28 11:42:09'null);  
  242. INSERT INTO t_sys_powerofaction VALUES ('8a8a9691398ad08401398ad3798f0002''200512012106555''/manager/powerSystem/list.jh''系统权限管理''1''999999999999999''2012-09-03 14:31:18'null);  
  243.   
  244. -- ----------------------------  
  245. -- Table structure for `t_sys_powerofchar`  
  246. -- ----------------------------  
  247. DROP TABLE IF EXISTS `t_sys_powerofchar`;  
  248. CREATE TABLE `t_sys_powerofchar` (  
  249.   `ID` varchar(50) NOT NULL COMMENT 'ID',  
  250.   `CHARID` varchar(50) NOT NULL COMMENT '角色ID',  
  251.   `POWERID` varchar(50) NOT NULL COMMENT '权限ID',  
  252.   `STATUS` decimal(1,0) NOT NULL default '1' COMMENT '是否有效',  
  253.   `MODPERSON` varchar(50) default NULL COMMENT '最后修改人',  
  254.   `MODTIME` timestamp NULL default NULL COMMENT '最后修改时间',  
  255.   `REMARK` varchar(100) default NULL COMMENT '备注',  
  256.   PRIMARY KEY  (`ID`),  
  257.   KEY `t_sys_powerofchar_powerid` (`POWERID`),  
  258.   KEY `t_sys_powerofchar_cid` (`CHARID`),  
  259.   KEY `t_sys_powerofchar_chid` (`CHARID`),  
  260.   KEY `t_sys_powerof_prid` (`POWERID`),  
  261.   CONSTRAINT `t_sys_powerofchar_chid` FOREIGN KEY (`CHARID`) REFERENCES `t_sys_character` (`ID`) ON DELETE CASCADE,  
  262.   CONSTRAINT `t_sys_powerof_prid` FOREIGN KEY (`POWERID`) REFERENCES `t_sys_power` (`ID`) ON DELETE CASCADE ON UPDATE NO ACTION  
  263. ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='角色权限表';  
  264.   
  265. -- ----------------------------  
  266. -- Records of t_sys_powerofchar  
  267. -- ----------------------------  
  268. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691396b237101396b4edd4a000e''8a8a9691396b237101396b44825a0001''8a8a96913933a87f013933b6c0f10003''1''999999999999999''2012-08-28 11:38:14'null);  
  269. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691396b237101396b4edd4a000f''8a8a9691396b237101396b44825a0001''8a8a96913933a87f013933b768ba0004''1''999999999999999''2012-08-28 11:38:14'null);  
  270. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691396b237101396b4ef14f0010''8a8a9691396b237101396b44aa060002''8a8a96913933a87f013933b768ba0004''1''999999999999999''2012-08-28 11:38:19'null);  
  271. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691396b237101396b4ef14f0011''8a8a9691396b237101396b44aa060002''8a8a9691396b237101396b45cf5c0003''1''999999999999999''2012-08-28 11:38:19'null);  
  272. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691396b237101396b5924b30019''297ef0cb3915b16a013915c7eb112312''200512012106555''1''999999999999999''2012-08-28 11:49:27'null);  
  273. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691396b237101396b5924b3001a''297ef0cb3915b16a013915c7eb112312''8a8a96913933a87f013933b6c0f10003''1''999999999999999''2012-08-28 11:49:27'null);  
  274. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691396b237101396b5924c3001b''297ef0cb3915b16a013915c7eb112312''8a8a96913933a87f013933b768ba0004''1''999999999999999''2012-08-28 11:49:27'null);  
  275. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691396b237101396b5924c3001c''297ef0cb3915b16a013915c7eb112312''8a8a9691396b237101396b45cf5c0003''1''999999999999999''2012-08-28 11:49:27'null);  
  276. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691396b237101396b5924d2001d''297ef0cb3915b16a013915c7eb112312''8a8a9691396b237101396b523c350012''1''999999999999999''2012-08-28 11:49:27'null);  
  277. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691396b237101396b5e28c2001f''8a8a9691396b237101396b55f45b0017''8a8a96913933a87f013933b768ba0004''1''999999999999999''2012-08-28 11:54:56'null);  
  278. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691396b237101396b5e28c20020''8a8a9691396b237101396b55f45b0017''8a8a9691396b237101396b523c350012''1''999999999999999''2012-08-28 11:54:56'null);  
  279. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691398b2dc201398b3232090010''297ef0cb3915b16a013915c7eb112312''200512012106555''1''999999999999999''2012-09-03 16:14:46'null);  
  280. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691398b2dc201398b3232090011''297ef0cb3915b16a013915c7eb112312''8a8a96913933a87f013933b6c0f10003''1''999999999999999''2012-09-03 16:14:46'null);  
  281. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691398b2dc201398b3232090012''297ef0cb3915b16a013915c7eb112312''8a8a96913933a87f013933b768ba0004''1''999999999999999''2012-09-03 16:14:46'null);  
  282. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691398b2dc201398b3232090013''297ef0cb3915b16a013915c7eb112312''8a8a9691396b237101396b45cf5c0003''1''999999999999999''2012-09-03 16:14:46'null);  
  283. INSERT INTO t_sys_powerofchar VALUES ('8a8a9691398b2dc201398b3232090014''297ef0cb3915b16a013915c7eb112312''8a8a9691396b237101396b523c350012''1''999999999999999''2012-09-03 16:14:46'null);  
  284.   
  285. -- ----------------------------  
  286. -- Table structure for `t_sys_powersystem`  
  287. -- ----------------------------  
  288. DROP TABLE IF EXISTS `t_sys_powersystem`;  
  289. CREATE TABLE `t_sys_powersystem` (  
  290.   `ID` varchar(20) NOT NULL,  
  291.   `role_name` varchar(20) NOT NULL,  
  292.   `intercept_url` varchar(50) NOT NULL,  
  293.   `STATUS` decimal(11,0) NOT NULL default '1',  
  294.   `MODPERSON` varchar(20) default NULL,  
  295.   `MODTIME` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,  
  296.   `REMARK` varchar(100) default NULL,  
  297.   `DESCRIPT` varchar(50) default NULL,  
  298.   PRIMARY KEY  (`ID`)  
  299. ) ENGINE=InnoDB DEFAULT CHARSET=gbk;  
  300.   
  301. -- ----------------------------  
  302. -- Records of t_sys_powersystem  
  303. -- ----------------------------  
  304. INSERT INTO t_sys_powersystem VALUES ('9201209031534081000''role_admin''/manager/**/*.jh''1''999999999999999''2012-09-03 15:34:08''管理员'null);  
  305. INSERT INTO t_sys_powersystem VALUES ('9201209031534551001''role_admin''/system/manager/**/*.jsp''1''999999999999999''2012-09-03 15:34:55''管理员'null);  
  306.   
  307. -- ----------------------------  
  308. -- Table structure for `t_sys_powersystemofchar`  
  309. -- ----------------------------  
  310. DROP TABLE IF EXISTS `t_sys_powersystemofchar`;  
  311. CREATE TABLE `t_sys_powersystemofchar` (  
  312.   `ID` varchar(20) NOT NULL,  
  313.   `CHARID` varchar(50) default NULL,  
  314.   `POWERsystemID` varchar(50) default NULL,  
  315.   `STATUS` decimal(11,0) NOT NULL default '1',  
  316.   `MODPERSON` varchar(20) default NULL,  
  317.   `MODTIME` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,  
  318.   `REMARK` varchar(100) default NULL,  
  319.   PRIMARY KEY  (`ID`),  
  320.   KEY `t_sys_powersystemofchar_CHARID` (`CHARID`),  
  321.   KEY `t_sys_powersystemofchar_POWERsystemID` (`POWERsystemID`),  
  322.   CONSTRAINT `t_sys_powersystemofchar_CHARID` FOREIGN KEY (`CHARID`) REFERENCES `t_sys_character` (`ID`),  
  323.   CONSTRAINT `t_sys_powersystemofchar_POWERsystemID` FOREIGN KEY (`POWERsystemID`) REFERENCES `t_sys_powersystem` (`ID`)  
  324. ) ENGINE=InnoDB DEFAULT CHARSET=gbk;  
  325.   
  326. -- ----------------------------  
  327. -- Records of t_sys_powersystemofchar  
  328. -- ----------------------------  
  329. INSERT INTO t_sys_powersystemofchar VALUES ('9201209031608531000''297ef0cb3915b16a013915c7eb112312''9201209031534081000''1''999999999999999''2012-09-03 16:08:53'null);  
  330. INSERT INTO t_sys_powersystemofchar VALUES ('9201209031608531001''297ef0cb3915b16a013915c7eb112312''9201209031534551001''1''999999999999999''2012-09-03 16:08:53'null);  
  331.   
  332.   
  333.   
  334. -- ----------------------------  
  335. -- Table structure for `t_sys_user`  
  336. -- ----------------------------  
  337. DROP TABLE IF EXISTS `t_sys_user`;  
  338. CREATE TABLE `t_sys_user` (  
  339.   `ID` varchar(50) NOT NULL COMMENT '用户ID',  
  340.   `CODE` varchar(20) NOT NULL COMMENT '用户登入代码',  
  341.   `NAMEvarchar(40) NOT NULL COMMENT '用户中文姓名',  
  342.   `PASSWORDvarchar(60) NOT NULL COMMENT '用户登入密码',  
  343.   `DUTYID` varchar(6) NOT NULL COMMENT '职务',  
  344.   `LOGINTYPE` decimal(1,0) default '0' COMMENT '登入类别',  
  345.   `SEX` decimal(1,0) default '1' COMMENT '性别',  
  346.   `MOBILE` varchar(50) default NULL COMMENT '手机',  
  347.   `EMAIL` varchar(120) default NULL COMMENT '邮件',  
  348.   `CAID` varchar(128) default NULL COMMENT '对应CA的唯一ID',  
  349.   `ORDERNO` varchar(6) default NULL COMMENT '排列顺序',  
  350.   `STATUS` decimal(1,0) NOT NULL default '1' COMMENT '是否有效',  
  351.   `MODPERSON` varchar(50) default NULL COMMENT '最后修改人',  
  352.   `MODTIME` timestamp NULL default NULL COMMENT '最后修改时间',  
  353.   `REMARK` varchar(100) default NULL COMMENT '备注',  
  354.   `departmentID` varchar(59) NOT NULL,  
  355.   PRIMARY KEY  (`ID`),  
  356.   UNIQUE KEY `CODE_UNIQUE` (`CODE`),  
  357.   KEY `t_sys_userdepartmentID` (`departmentID`),  
  358.   KEY `t_sys_userdutyID` (`DUTYID`),  
  359.   CONSTRAINT `t_sys_userdepartmentID` FOREIGN KEY (`departmentID`) REFERENCES `t_sys_department` (`ID`) ON DELETE NO ACTION,  
  360.   CONSTRAINT `t_sys_userdutyID` FOREIGN KEY (`DUTYID`) REFERENCES `t_sys_duty` (`id`)  
  361. ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='用户表';  
  362.   
  363. -- ----------------------------  
  364. -- Records of t_sys_user  
  365. -- ----------------------------  
  366. INSERT INTO t_sys_user VALUES ('8a8a9691396b237101396b4e0624000c''123456''任务分发''e10adc3949ba59abbe56e057f20f883e''0001'null'1'''''null'''1''999999999999999''2012-08-28 11:37:19''''297ef0cb391b4ce301391b4e3d8e6530');  
  367. INSERT INTO t_sys_user VALUES ('8a8a9691396b237101396b5f73ef0023''666666''任务接受''f379eaf3c831b04de153469d1bec345e''0003'null'1'''''null'''1''999999999999999''2012-08-28 11:56:21''''297ef0cb391b4ce301391b4e3d8e6530');  
  368. INSERT INTO t_sys_user VALUES ('999999999999999''admin''超级管理员''21232f297a57a5a743894a0e4a801fc3''0022'null'1''''zhou@136.com'null'20''1''999999999999999''2012-09-14 11:17:18''123''297ef0cb391b4ce301391b4e3d8e6530');  
  369.   
  370. -- ----------------------------  
  371. -- Table structure for `t_sys_usergroup`  
  372. -- ----------------------------  
  373. DROP TABLE IF EXISTS `t_sys_usergroup`;  
  374. CREATE TABLE `t_sys_usergroup` (  
  375.   `ID` varchar(50) NOT NULL COMMENT '用户组ID',  
  376.   `NAMEvarchar(30) NOT NULL COMMENT '用户组名称',  
  377.   `DESCRIPT` varchar(200) default NULL COMMENT '描述',  
  378.   `DEPARTID` varchar(20) default NULL COMMENT '部门ID',  
  379.   `STATUS` decimal(1,0) NOT NULL default '1' COMMENT '是否有效',  
  380.   `MODPERSON` varchar(50) default NULL COMMENT '最后修改人',  
  381.   `MODTIME` timestamp NULL default NULL COMMENT '最后修改时间',  
  382.   `REMARK` varchar(100) default NULL COMMENT '备注',  
  383.   `PARENT` varchar(20) default NULL,  
  384.   `XZQHID` varchar(20) default NULL COMMENT '关联的行政区域ID',  
  385.   `LAYER` decimal(2,0) default NULL,  
  386.   PRIMARY KEY  (`ID`)  
  387. ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='用户组表';  
  388.   
  389. -- ----------------------------  
  390. -- Records of t_sys_usergroup  
  391. -- ----------------------------  
  392. INSERT INTO t_sys_usergroup VALUES ('1234567890''系统管理员组''系统管理员'null'1''999999999999999''2012-08-18 18:11:52'nullnullnullnull);  
  393. INSERT INTO t_sys_usergroup VALUES ('8a8a9691396b237101396b4b819c0008''任务分发''任务分发'null'1''999999999999999''2012-08-28 11:34:34'nullnullnullnull);  
  394. INSERT INTO t_sys_usergroup VALUES ('8a8a9691396b237101396b4b98be0009''任务接受''任务接受'null'1''999999999999999''2012-08-28 11:34:40'nullnullnullnull);  
  395. INSERT INTO t_sys_usergroup VALUES ('8a8a9691396b237101396b5ea8230021''任务审核''任务审核'null'1''999999999999999''2012-08-28 11:55:29'nullnullnullnull);  
  396.   
  397. -- ----------------------------  
  398. -- Table structure for `t_sys_userofusergroup`  
  399. -- ----------------------------  
  400. DROP TABLE IF EXISTS `t_sys_userofusergroup`;  
  401. CREATE TABLE `t_sys_userofusergroup` (  
  402.   `ID` varchar(50) NOT NULL,  
  403.   `USERID` varchar(50) NOT NULL COMMENT '用户ID',  
  404.   `USERGROUPID` varchar(50) NOT NULL COMMENT '用户组ID',  
  405.   `STATUS` decimal(1,0) NOT NULL default '1' COMMENT '是否有效',  
  406.   `MODPERSON` varchar(50) default NULL COMMENT '最后修改人',  
  407.   `MODTIME` timestamp NULL default NULL COMMENT '最后修改时间',  
  408.   `REMARK` varchar(100) default NULL COMMENT '备注',  
  409.   PRIMARY KEY  (`ID`),  
  410.   KEY `t_sys_userofusergroup_userid` (`USERID`),  
  411.   KEY `t_sys_userofusergroup_usergroupid` (`USERGROUPID`),  
  412.   CONSTRAINT `t_sys_userofusergroup_usergroupid` FOREIGN KEY (`USERGROUPID`) REFERENCES `t_sys_usergroup` (`ID`) ON DELETE CASCADE,  
  413.   CONSTRAINT `t_sys_userofusergroup_userid` FOREIGN KEY (`USERID`) REFERENCES `t_sys_user` (`ID`) ON DELETE CASCADE ON UPDATE NO ACTION  
  414. ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='用户组对应用户关系表';  
  415.   
  416. -- ----------------------------  
  417. -- Records of t_sys_userofusergroup  
  418. -- ----------------------------  
  419. INSERT INTO t_sys_userofusergroup VALUES ('297ef0cb3919d144013919e873fd0008''999999999999999''1234567890''1''999999999999999''2012-08-13 09:48:56'null);  
  420. INSERT INTO t_sys_userofusergroup VALUES ('8a8a9691396b237101396b4e0634000d''8a8a9691396b237101396b4e0624000c''8a8a9691396b237101396b4b819c0008''1''8a8a9691396b237101396b4e0624000c''2012-08-28 11:37:19'null);  
  421. INSERT INTO t_sys_userofusergroup VALUES ('8a8a9691396b237101396b5f73ff0024''8a8a9691396b237101396b5f73ef0023''8a8a9691396b237101396b4b98be0009''1''8a8a9691396b237101396b5f73ef0023''2012-08-28 11:56:21'null);  

 

6 、附件为完整程序与数据库脚本, 导入sql脚本时请注意工具的差异化, 我用的工具是Navicat Lite

 

下篇期待linux相关文章

  • backs.zip (6.1 KB)
  • 描述: 数据库脚本
  • 下载次数: 193
  • lib2.zip (5.4 MB)
  • 描述: 包
  • 下载次数: 441
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值