Spring Security 3.0データベース動的アクセス制御

34660 ワード

開発環境SpringIDE 3.0、Spring Security 3.0.2、myibatis、Maven、MySql
最前面のスプリングコンフィギュレーションやMaven管理ラック、myibatisのコンフィギュレーションは言わない
まず、
1、必要なJARパッケージをpomに配置する必要がある
2、web.xmlにspring securityのフィルタチェーンを追加
      
        springSecurityFilterChain  
        org.springframework.web.filter.DelegatingFilterProxy  
      
      
      
        springSecurityFilterChain  
        /*  
      

3、アプリケーションContext-securityを追加する.xmlからルートディレクトリの下
内容は次のとおりです.
  
  
  
      
      
      
      
          
            
            
            
            
            
            
            
            
          
          
          
          
          
          
          
           
              
          
          
          
          
      
      
      
      
          
              
              
          
      

上はXMLファイルで、説明する必要があります:intercept-urlノードは少なくとも1つのブロックが必要です.もしすべてのフィルタリング画像やスタイルがあれば、springフレームワークが起動すると、関連するブロックのintercept-urlを構成していないので、誰もがリソース全体にアクセスできると思っています.
その中のノードの用途はすべて説明があって、くどくどしません
4、CustomUserDetailsService、CustomAccessDecisionManager、CustomFilterSecurityInterceptor、CustomInvocationSecurityMetadataSourceの作成
この4つのクラス私が定義したインタフェースは、対応する実装クラスがあり、動的権限制御を実装する上でこの4つのクラスが使用されます.
a、CustomUserDetailsServiceImplは、CustomUserDetailsServiceがorgから継承することを実現する.springframework.security.core.userdetails.UserDetailsService、このクラスは主にユーザー登録情報を処理し、ユーザーがユーザー名とパスワードを入力するとspring securityはユーザー名呼び出しクラスのloadUserByUsername(usrename)メソッドを持っています.ここで個人的には、パスワードを検証条件としてユーザー名でユーザー情報を検出し、データベースで検出したユーザーパスワードとさっきユーザーが入力したsessionに格納されたパスワードを比較していないことを理解しています.そしてそのユーザーが合法かどうかを判断します!
    package com.doone.wisdom.security.impl;  
      
    import java.util.ArrayList;  
    import java.util.Collection;  
    import java.util.List;  
      
    import javax.annotation.Resource;  
      
    import org.springframework.security.core.GrantedAuthority;  
    import org.springframework.security.core.authority.GrantedAuthorityImpl;  
    import org.springframework.security.core.userdetails.User;  
    import org.springframework.security.core.userdetails.UserDetails;  
    import org.springframework.security.core.userdetails.UsernameNotFoundException;  
    import org.springframework.stereotype.Service;  
      
    import com.doone.wisdom.dao.security.UserDao;  
    import com.doone.wisdom.entity.security.RoleEntity;  
    import com.doone.wisdom.entity.security.UserEntity;  
    import com.doone.wisdom.security.service.CustomUserDetailsService;  
      
    /**  
     * TODO(              ). 
     * @ClassName: CustomUserDetailsServiceImpl 
     * @author Johnny_L_Q 
     */  
    @Service("customUserDetailsService")  
    public class CustomUserDetailsServiceImpl implements CustomUserDetailsService {  
      
        /** 
         * @Fields serialVersionUID : TODO(              ). 
         */  
        private static final long serialVersionUID = 1L;  
          
        @Resource  
        private UserDao userDao;  
          
      
        /* 
         *             
         * 

Title: loadUserByUsername

*

Description:

* @param arg0 * @return * @throws UsernameNotFoundException * @see org.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.lang.String) */ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { UserEntity user = userDao.getUser(username); if (null == user) { throw new UsernameNotFoundException(" " + username + " "); } Collection auths = new ArrayList(); List list = userDao.getAuthoritiesByUsername(username); for (int i = 0; i < list.size(); i++) { auths.add(new GrantedAuthorityImpl(list.get(i))); System.out.println("loadUserByUsername : " + list.get(i)); } // UserEntity UserDetails, user return new User(username, user.getPassword(), true, true, true, true, auths); } }

b、CustomAccessDecisionManagerImpl実装CustomAccessDecisionManagerはorgから継承する.springframework.security.access.AccessDecisionManager
このクラスは主にユーザーがあるURLにアクセスする时、そのクラスにアクセスする権限を通じてログインユーザーが持っている権限と比较して、もし権限を持っていれば、あなたは外星文明にアクセスすることができて、もし権限がなければ、あなたはアフリカに送還されて、また1つの异常を投げてあなたに教えて、あなたはすでにアフリカに送還されました!
package com.doone.wisdom.security.impl;  
  
import java.util.Collection;  
import java.util.Iterator;  
  
import org.springframework.security.access.AccessDeniedException;  
import org.springframework.security.access.ConfigAttribute;  
import org.springframework.security.access.SecurityConfig;  
import org.springframework.security.authentication.InsufficientAuthenticationException;  
import org.springframework.security.core.Authentication;  
import org.springframework.security.core.GrantedAuthority;  
import org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl;  
import org.springframework.security.provisioning.JdbcUserDetailsManager;  
import org.springframework.stereotype.Service;  
  
import com.doone.wisdom.security.service.CustomAccessDecisionManager;  
  
/**  
 *  
 * AccessdecisionManager Spring security      。  
 *   
 *           ,   Authentication         GrantedAuthority     。            。  
 * GrantedAuthority    AuthenticationManager      
 * Authentication   ,   AccessDecisionManager   ,      。  
 *   
 * Spring Security        ,             ,       web  。  
 *                 ,  AccessDecisionManager   。    AccessDecisionManager  
 *  AbstractSecurityInterceptor  ,              。  
 *   AccessDecisionManager        :  
 *   
 * void decide(Authentication authentication, Object secureObject,  
 * List config) throws AccessDeniedException; boolean  
 * supports(ConfigAttribute attribute); boolean supports(Class clazz);  
 *   
 *            ,AccessDecisionManager            ,             。  
 *    ,               ,    Object      。   ,            MethodInvocation。  
 *       Customer    MethodInvocation,  
 *    AccessDecisionManager            ,                 。  
 *        ,       AccessDeniedException  。  
 *   
 *    supports(ConfigAttribute)            
 * AbstractSecurityInterceptor  ,   AccessDecisionManager  
 *         ConfigAttribute。 supports(Class)            ,  
 *            AccessDecisionManager         。   
 * TODO(              ). 
 * @ClassName: CustomAccessDecisionManagerImpl 
 * @author Johnny_L_Q 
 */  
@Service("customAccessDecisionManager")  
public class CustomAccessDecisionManagerImpl implements  
        CustomAccessDecisionManager {  
  
    /* 
     * 

Title: decide

*

Description:

* @param arg0 * @param arg1 * @param arg2 * @throws AccessDeniedException * @throws InsufficientAuthenticationException * @see org.springframework.security.access.AccessDecisionManager * #decide(org.springframework.security.core.Authentication, java.lang.Object, java.util.Collection) */ @Override public void decide(Authentication authentication, Object object, Collection configAttributes) throws AccessDeniedException, InsufficientAuthenticationException { if (null == configAttributes) { return; } Iterator cons = configAttributes.iterator(); while(cons.hasNext()){ ConfigAttribute ca = cons.next(); String needRole = ((SecurityConfig) ca).getAttribute(); //gra ,needRole for (GrantedAuthority gra : authentication.getAuthorities()) { if (needRole.trim().equals(gra.getAuthority().trim())) { return; } } } throw new AccessDeniedException("Access Denied"); } /* *

Title: supports

*

Description:

* @param arg0 * @return * @see org.springframework.security.access.AccessDecisionManager#supports(org.springframework.security.access.ConfigAttribute) */ @Override public boolean supports(ConfigAttribute arg0) { // TODO Auto-generated method stub return true; } /* *

Title: supports

*

Description:

* @param arg0 * @return * @see org.springframework.security.access.AccessDecisionManager#supports(java.lang.Class) */ @Override public boolean supports(Class> arg0) { // TODO Auto-generated method stub return true; } }

c、C u s t o m F i l t e r S e c u rityInterceptorImplは、C u s t o m F i l t e r S e c u rityInterceptorがjavaxを継承することを実現する.servlet.Filter
このクラスの目的はブロックの入口で、まず起動する時に注入の中の属性を注入して、それからユーザーがあなたの配置したURLにアクセスする時、ブロックされてdoFilterの方法の中に入って、infoke()の方法を呼び出してCustomAccessDecisionManagerImplに入ります.decide()メソッドでは、アクセスするurlと構成されたurlの権限を比較します.
    package com.doone.wisdom.security.impl;  
      
    import java.io.IOException;  
      
    import javax.annotation.Resource;  
    import javax.servlet.FilterChain;  
    import javax.servlet.FilterConfig;  
    import javax.servlet.ServletException;  
    import javax.servlet.ServletRequest;  
    import javax.servlet.ServletResponse;  
      
    import org.springframework.beans.factory.annotation.Qualifier;  
    import org.springframework.security.access.AccessDecisionManager;  
    import org.springframework.security.access.SecurityMetadataSource;  
    import org.springframework.security.access.intercept.AbstractSecurityInterceptor;  
    import org.springframework.security.access.intercept.InterceptorStatusToken;  
    import org.springframework.security.authentication.AuthenticationManager;  
    import org.springframework.security.web.FilterInvocation;  
    import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;  
    import org.springframework.stereotype.Service;  
      
    import com.doone.wisdom.security.service.CustomFilterSecurityInterceptor;  
      
    /**   
     *              spring   IoC  securityMetadataSource。  
     * securityMetadataSource          CostomInvocationSecurityMetadataSourceService。  
     *  CostomInvocationSecurityMetadataSourceService               ,   HashMap ,  
     *  Spring Security  ,      。  
     *   
     * TODO(              ). 
     * @ClassName: CustomFilterSecurityInterceptorImpl 
     * @author Johnny_L_Q 
     */  
    @Service("customFilterSecurityInterceptor")  
    public class CustomFilterSecurityInterceptorImpl extends  
            AbstractSecurityInterceptor implements CustomFilterSecurityInterceptor {  
      
        @Resource  
        @Qualifier("customInvocationSecurityMetadataSource")  
        private FilterInvocationSecurityMetadataSource securityMetadataSource;  
         
      
        @Resource  
        @Qualifier("customAccessDecisionManager")  
        @Override  
        public void setAccessDecisionManager(  
                AccessDecisionManager accessDecisionManager) {  
            // TODO Auto-generated method stub  
            super.setAccessDecisionManager(accessDecisionManager);  
        }  
    /*    @Resource 
        @Qualifier("customAccessDecisionManager") 
        public AccessDecisionManager accessDecisionManager;*/  
          
    /*    @Resource 
        @Qualifier("authenticationManager") 
        public AuthenticationManager authenticationManager;*/  
          
          
        @Resource  
        @Qualifier("authenticationManager")  
        @Override  
        public void setAuthenticationManager(AuthenticationManager newManager) {  
            super.setAuthenticationManager(newManager);  
        }  
          
        /* 
         * 

Title: doFilter

*

Description:

* @param arg0 * @param arg1 * @param arg2 * @throws IOException * @throws ServletException * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { FilterInvocation fi = new FilterInvocation(request, response, chain); infoke(fi); } /** * TODO( ). * @param fi * @throws ServletException * @throws IOException */ private void infoke(FilterInvocation fi) throws IOException, ServletException { InterceptorStatusToken token = super.beforeInvocation(fi); try { fi.getChain().doFilter(fi.getRequest(), fi.getResponse()); } finally { super.afterInvocation(token, null); } } /* *

Title: init

*

Description:

* @param arg0 * @throws ServletException * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */ @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } /* *

Title: getSecureObjectClass

*

Description:

* @return * @see org.springframework.security.access.intercept.AbstractSecurityInterceptor#getSecureObjectClass() */ @Override public Class> getSecureObjectClass() { // TODO Auto-generated method stub return FilterInvocation.class; } /* *

Title: obtainSecurityMetadataSource

*

Description:

* @return * @see org.springframework.security.access.intercept.AbstractSecurityInterceptor#obtainSecurityMetadataSource() */ @Override public SecurityMetadataSource obtainSecurityMetadataSource() { // TODO Auto-generated method stub return this.securityMetadataSource; } /* *

Title: destroy

*

Description:

* @see javax.servlet.Filter#destroy() */ @Override public void destroy() { // TODO Auto-generated method stub } public FilterInvocationSecurityMetadataSource getSecurityMetadataSource() { return securityMetadataSource; } public void setSecurityMetadataSource( FilterInvocationSecurityMetadataSource securityMetadataSource) { this.securityMetadataSource = securityMetadataSource; } }

d、C u s t o m F i l t e r I n v o c t i o n S e c u r t y MetadataSourceImpl実装C u s t o m F i l t e r I v o c t i o n S e c u r t y MetadataSource継承
org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource
このクラスの主な役割はSpring Securityのフィルタチェーン全体が起動した後、コンテナが起動するとプログラムがそのクラスに入るinit()メソッドで、initはloadResourceDefine()メソッドを呼び出し、このメソッドの主な目的はデータベース内のすべてのリソースと権限をローカルキャッシュに読み込んで保存することです!クラスのresourceMapは、保存されているすべてのリソースと権限の集合であり、URLはKeyであり、権限はValueとして機能します!
package com.doone.wisdom.security.impl;  
  
import java.util.ArrayList;  
import java.util.Collection;  
import java.util.HashMap;  
import java.util.Iterator;  
import java.util.List;  
  
import javax.annotation.PostConstruct;  
import javax.annotation.Resource;  
  
import org.springframework.security.access.ConfigAttribute;  
import org.springframework.security.access.SecurityConfig;  
import org.springframework.security.web.FilterInvocation;  
import org.springframework.security.web.util.AntUrlPathMatcher;  
import org.springframework.security.web.util.UrlMatcher;  
import org.springframework.stereotype.Service;  
  
import com.doone.wisdom.entity.security.AuthorityEntity;  
import com.doone.wisdom.entity.security.RoleEntity;  
import com.doone.wisdom.security.service.CustomInvocationSecurityMetadataSource;  
import com.doone.wisdom.service.iface.AuthorityService;  
import com.doone.wisdom.service.iface.ResourceService;  
  
/**  
 * TODO(              ). 
 * @ClassName: CustomInvocationSecurityMetadataSourceImpl 
 * @author Johnny_L_Q 
 */  
@Service("customInvocationSecurityMetadataSource")  
public class CustomInvocationSecurityMetadataSourceImpl implements  
        CustomInvocationSecurityMetadataSource {  
  
    @Resource  
    private ResourceService resourceService;  
      
    @Resource  
    private AuthorityService authorityService;  
  
    private UrlMatcher urlMatcher = new AntUrlPathMatcher();  
  
    //private AntPathRequestMatcher pathMatcher;  
  
    private HashMap> resourceMap = null;  
  
    /** 
     * 
     *      ,      Spring   ,  
     *   init      ,           
     * TODO(               ). 
     */  
    @PostConstruct  
    public void init() {  
        loadResourceDefine();  
    }  
  
    /** 
     *  
     * TODO(                ). 
     */  
    private void loadResourceDefine() {  
  
        //  Web      ,          。  
        //sql = "select authority_name from pub_authorities";  
  
        List query = authorityService.getAllAuthoritys();  
  
        /**//* 
             *       key,    value。      url,        ROLE_      。               。 
             * sparta 
             */  
        resourceMap = new HashMap>();  
  
        for (AuthorityEntity auth : query) {  
            String authName = auth.getAuthorityName();  
              
            ConfigAttribute ca = new SecurityConfig(auth.getAuthorityName());  
  
            List resources = resourceService.getResourcesByAuthName(authName);  
           
  
            for (String str : resources) {  
                //String authName = auth2.getAuthorityName();  
                String url = str;  
  
                /**//* 
                     *               ,           url,     url key       ,           。 
                     * sparta 
                     */  
                if (resourceMap.containsKey(url)) {  
  
                    Collection value = resourceMap.get(url);  
                    value.add(ca);  
                    resourceMap.put(url, value);  
                } else {  
                    Collection atts = new ArrayList();  
                    atts.add(ca);  
                    resourceMap.put(url, atts);  
                }  
  
            }  
  
        }  
  
    }  
  
    /** 
     * TODO(     , List          Collection  ). 
     * @param roles      
     * @return list     Collection   
     */  
    private Collection listToCollection(List roles) {  
        List list = new ArrayList();  
  
        for (RoleEntity role : roles) {  
            list.add(new SecurityConfig(role.getRoleName()));  
  
        }  
        return list;  
    }  
  
    /* 
     * 

Title: getAllConfigAttributes

*

Description:

* @return * @see org.springframework.security.access.SecurityMetadataSource#getAllConfigAttributes() */ @Override public Collection getAllConfigAttributes() { return null; } /* *

Title: getAttributes

*

Description:

* @param arg0 * @return * @throws IllegalArgumentException * @see org.springframework.security.access.SecurityMetadataSource#getAttributes(java.lang.Object) */ @Override public Collection getAttributes(Object object) throws IllegalArgumentException { //object URL , URL String url = ((FilterInvocation)object).getRequestUrl(); if("/".equals(url)){ return null; } int firstQuestionMarkIndex = url.indexOf("."); // (/index.do --> /index) if(firstQuestionMarkIndex != -1){ url = url.substring(0,firstQuestionMarkIndex); } Iterator ite = resourceMap.keySet().iterator(); // URL while (ite.hasNext()) { String resURL = ite.next(); if(urlMatcher.pathMatchesUrl(url, resURL)){ return resourceMap.get(resURL); } } return null; } /* *

Title: supports

*

Description:

* @param arg0 * @return * @see org.springframework.security.access.SecurityMetadataSource#supports(java.lang.Class) */ @Override public boolean supports(Class> arg0) { // TODO Auto-generated method stub return true; } }

以上がspring securityで使用するコードで、次はデータベースです.
5、データベース設計なら標準の7枚の表
1、pub_authorities
    /* 
    MySQL Data Transfer 
    Source Host: localhost 
    Source Database: wisdom 
    Target Host: localhost 
    Target Database: wisdom 
    Date: 2012/10/19 9:29:52 
    */  
      
    SET FOREIGN_KEY_CHECKS=0;  
    -- ----------------------------  
    -- Table structure for pub_authorities  
    -- ----------------------------  
    CREATE TABLE `pub_authorities` (  
      `authority_id` varchar(32) COLLATE utf8_bin NOT NULL,  
      `authority_name` varchar(40) COLLATE utf8_bin NOT NULL,  
      `authority_desc` varchar(100) COLLATE utf8_bin DEFAULT NULL,  
      `enabled` int(10) NOT NULL,  
      `issys` int(10) NOT NULL,  
      PRIMARY KEY (`authority_id`)  
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  
      
    -- ----------------------------  
    -- Records   
    -- ----------------------------  
    INSERT INTO `pub_authorities` VALUES ('1', 'ROLE_ADMIN', '       ', '1', '0');  
    INSERT INTO `pub_authorities` VALUES ('2', 'ROLE_USER', '  ', '1', '0');  

2、pub_resources
/* 
MySQL Data Transfer 
Source Host: localhost 
Source Database: wisdom 
Target Host: localhost 
Target Database: wisdom 
Date: 2012/10/19 9:30:25 
*/  
  
SET FOREIGN_KEY_CHECKS=0;  
-- ----------------------------  
-- Table structure for pub_resources  
-- ----------------------------  
CREATE TABLE `pub_resources` (  
  `resource_id` varchar(32) COLLATE utf8_bin NOT NULL,  
  `resource_name` varchar(100) COLLATE utf8_bin NOT NULL,  
  `resource_type` varchar(40) COLLATE utf8_bin NOT NULL,  
  `priority` int(10) NOT NULL,  
  `resource_string` varchar(200) COLLATE utf8_bin NOT NULL,  
  `resource_desc` varchar(100) COLLATE utf8_bin DEFAULT NULL,  
  `enabled` int(10) NOT NULL,  
  `issys` int(10) NOT NULL,  
  PRIMARY KEY (`resource_id`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  
  
-- ----------------------------  
-- Records   
-- ----------------------------  
INSERT INTO `pub_resources` VALUES ('1', '       ', 'action', '0', '/funcPages/adManager', '       ', '1', '0');  
INSERT INTO `pub_resources` VALUES ('2', '  ', 'action', '0', '/index', '  ', '1', '0'); 

3、pub_authorities_resources
    /* 
    MySQL Data Transfer 
    Source Host: localhost 
    Source Database: wisdom 
    Target Host: localhost 
    Target Database: wisdom 
    Date: 2012/10/19 9:30:17 
    */  
      
    SET FOREIGN_KEY_CHECKS=0;  
    -- ----------------------------  
    -- Table structure for pub_authorities_resources  
    -- ----------------------------  
    CREATE TABLE `pub_authorities_resources` (  
      `id` varchar(32) COLLATE utf8_bin NOT NULL,  
      `authority_id` varchar(32) COLLATE utf8_bin NOT NULL,  
      `resource_id` varchar(32) COLLATE utf8_bin NOT NULL,  
      PRIMARY KEY (`id`),  
      KEY `fk_res_aut` (`authority_id`),  
      KEY `fk_res` (`resource_id`),  
      CONSTRAINT `fk_res` FOREIGN KEY (`resource_id`) REFERENCES `pub_resources` (`resource_id`),  
      CONSTRAINT `fk_res_aut` FOREIGN KEY (`authority_id`) REFERENCES `pub_authorities` (`authority_id`)  
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  
      
    -- ----------------------------  
    -- Records   
    -- ----------------------------  
    INSERT INTO `pub_authorities_resources` VALUES ('1', '1', '1');  
    INSERT INTO `pub_authorities_resources` VALUES ('2', '2', '2');  

4、pub_roles
/* 
MySQL Data Transfer 
Source Host: localhost 
Source Database: wisdom 
Target Host: localhost 
Target Database: wisdom 
Date: 2012/10/19 9:30:30 
*/  
  
SET FOREIGN_KEY_CHECKS=0;  
-- ----------------------------  
-- Table structure for pub_roles  
-- ----------------------------  
CREATE TABLE `pub_roles` (  
  `role_id` varchar(32) COLLATE utf8_bin NOT NULL,  
  `role_name` varchar(100) COLLATE utf8_bin NOT NULL,  
  `role_desc` varchar(100) COLLATE utf8_bin DEFAULT NULL,  
  `enabled` int(10) NOT NULL,  
  `issys` int(10) NOT NULL COMMENT '   ',  
  PRIMARY KEY (`role_id`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  
  
-- ----------------------------  
-- Records   
-- ----------------------------  
INSERT INTO `pub_roles` VALUES ('1', 'ROLE_ADMIN', '    ', '1', '0');  
INSERT INTO `pub_roles` VALUES ('2', 'ROLE_USER', '    ', '1', '0');

5、pub_roles_authorities
    /* 
    MySQL Data Transfer 
    Source Host: localhost 
    Source Database: wisdom 
    Target Host: localhost 
    Target Database: wisdom 
    Date: 2012/10/19 9:30:36 
    */  
      
    SET FOREIGN_KEY_CHECKS=0;  
    -- ----------------------------  
    -- Table structure for pub_roles_authorities  
    -- ----------------------------  
    CREATE TABLE `pub_roles_authorities` (  
      `id` varchar(32) COLLATE utf8_bin NOT NULL,  
      `role_id` varchar(32) COLLATE utf8_bin NOT NULL,  
      `authority_id` varchar(32) COLLATE utf8_bin NOT NULL,  
      PRIMARY KEY (`id`),  
      KEY `fk_aut_role` (`role_id`),  
      KEY `fk_aut` (`authority_id`),  
      CONSTRAINT `fk_aut` FOREIGN KEY (`authority_id`) REFERENCES `pub_authorities` (`authority_id`),  
      CONSTRAINT `fk_aut_role` FOREIGN KEY (`role_id`) REFERENCES `pub_roles` (`role_id`)  
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  
      
    -- ----------------------------  
    -- Records   
    -- ----------------------------  
    INSERT INTO `pub_roles_authorities` VALUES ('1', '1', '1');  
    INSERT INTO `pub_roles_authorities` VALUES ('2', '1', '2');  
    INSERT INTO `pub_roles_authorities` VALUES ('3', '2', '2');  

6、pub_users
    /* 
    MySQL Data Transfer 
    Source Host: localhost 
    Source Database: wisdom 
    Target Host: localhost 
    Target Database: wisdom 
    Date: 2012/10/19 9:30:42 
    */  
      
    SET FOREIGN_KEY_CHECKS=0;  
    -- ----------------------------  
    -- Table structure for pub_users  
    -- ----------------------------  
    CREATE TABLE `pub_users` (  
      `user_id` varchar(32) COLLATE utf8_bin NOT NULL,  
      `user_account` varchar(30) COLLATE utf8_bin NOT NULL,  
      `user_name` varchar(40) COLLATE utf8_bin NOT NULL,  
      `user_password` varchar(100) COLLATE utf8_bin NOT NULL,  
      `enabled` int(10) NOT NULL,  
      `issys` int(10) NOT NULL,  
      `user_desc` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '   ',  
      PRIMARY KEY (`user_id`)  
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  
      
    -- ----------------------------  
    -- Records   
    -- ----------------------------  
    INSERT INTO `pub_users` VALUES ('1', 'admin', 'admin', '21232f297a57a5a743894a0e4a801fc3', '1', '1', '     ');  
    INSERT INTO `pub_users` VALUES ('2', 'user', 'user', 'ee11cbb19052e40b07aac0ca060c23ee', '1', '0', '    ');  

7、pub_users_roles
/* 
MySQL Data Transfer 
Source Host: localhost 
Source Database: wisdom 
Target Host: localhost 
Target Database: wisdom 
Date: 2012/10/19 9:30:48 
*/  
  
SET FOREIGN_KEY_CHECKS=0;  
-- ----------------------------  
-- Table structure for pub_users_roles  
-- ----------------------------  
CREATE TABLE `pub_users_roles` (  
  `id` varchar(32) CHARACTER SET utf8 NOT NULL,  
  `user_id` varchar(32) COLLATE utf8_bin NOT NULL,  
  `role_id` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '        ',  
  PRIMARY KEY (`id`),  
  KEY `fk_user` (`user_id`),  
  KEY `fk_role` (`role_id`),  
  CONSTRAINT `fk_role` FOREIGN KEY (`role_id`) REFERENCES `pub_roles` (`role_id`),  
  CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `pub_users` (`user_id`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  
  
-- ----------------------------  
-- Records   
-- ----------------------------  
INSERT INTO `pub_users_roles` VALUES ('1', '1', '1');  
INSERT INTO `pub_users_roles` VALUES ('2', '2', '2'); 

最初に実行した時pub_authoritysテーブルに格納されているのはAUTH_***でもspring securityはROLEしか知らないみたい接頭辞の権限は、ROLE_のみです.接頭辞は比較できるので注意が必要ですloadResourceDefine()メソッドのresourceMapのURLに対する権限は、ROLE_である必要があります.接頭辞のデータ!もしあなたが確定していないならば、方法でresourceMapの値を印刷して見てもいいです!
ここでは、myibatisベースのSQLで使用されるクエリー・メソッドのSQLをいくつか提供します.
1、getAuthoritiesByUsername(String username)
    select b.authority_name   
             from  
             PUB_ROLES a,  
             PUB_AUTHORITIES b,  
             PUB_ROLES_AUTHORITIES c   
             where c.role_id = a.role_id and c.authority_id = b.authority_id and a.role_name in   
             (select role_name from  
             PUB_USERS_ROLES ur,  
             PUB_USERS u,  
             PUB_ROLES r  
             where ur.user_id = u.user_id and ur.role_id = r.role_id and u.user_name = #{username}  
             )  

2、getUser(String username)
select * from   
         PUB_USERS u  
         where u.user_name = #{username} 

3、getResourcesByAuthName(String authName)
select b.resource_string from PUB_AUTHORITIES_RESOURCES a ,PUB_RESOURCES b, PUB_AUTHORITIES c  
         where a.resource_id = b.resource_id and a.authority_id = c.authority_id and c.authority_name = #{authName}

4、getAllAuthoritys()
select * from pub_authorities