Spring securityステップデータベース内のアカウントとパスワード認証を使用

16699 ワード

目次
  • spring securityデータベース内のアカウントとパスワード認証を使用
  • 一、原理分析
  • 二、コード実現
  • 1.javaWebエンジニアリング
  • を新規作成
  • .ユーザ認証の実現
  • .
  • 3.テスト
  • 三、総括

  • Spring securityデータベース内のアカウントとパスワード認証を使用
    サンプルエンジニアリングアドレス
    一、原理分析
    フロントのログイン要求がバックエンドに送信されるとspring securityによってブロックされます.すなわち、controllerレイヤはフレームワーク自体によって提供されます.これにより、ユーザー名とパスワードの認証はサービス層で完了する必要があるため、フレームワークはサービス層で独自のデータベースアカウント情報を取得する必要があります.
    Spring securityは、ユーザーにアカウントとパスワードを提供するインタフェースUserDetailsServiceを提供しています.その内容は次のとおりです.
    public interface UserDetailsService {
        UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
    }

    ユーザーはこのインタフェースのloadUserByUsernameメソッドを実装し、データベースでクエリーされたアカウントとパスワードを通じてUserDetailsオブジェクトを構築してspring securityに返し、フレームワークは自分で認証操作を完了します.
    UserDetailsもインタフェースで、spring securityは現在認証されているユーザー情報をカプセル化します.
    public interface UserDetails extends Serializable {
        Collection extends GrantedAuthority> getAuthorities();
        String getPassword();
        String getUsername();
        boolean isAccountNonExpired();
        boolean isAccountNonLocked();
        boolean isCredentialsNonExpired();
        boolean isEnabled();
    }

    Spring securityは、Userのコードの一部を直接使用できる実装クラスを提供しています.
    public class User implements UserDetails, CredentialsContainer {
    private String password;
    private final String username;
    private final Set authorities;
    private final boolean accountNonExpired; //      
    private final boolean accountNonLocked; //      
    private final boolean credentialsNonExpired; //      
    private final boolean enabled; //      
    }

    したがって、データベースを使用して認証を完了する鍵は、UserDetailsServiceインタフェースを実装し、loadUserByUsernameメソッドでフレームワークに必要なUserDetailsオブジェクトをカプセル化することです.すなわち、Userオブジェクトはフレームワークに戻り、フレームワークによって後続の認証操作を完了します.
    認証に使用するuserServiceのbeanをspring securityのプロファイルに指定する必要があります.
    二、コード実装
    1.javaWebプロジェクトの新規作成
    Javawebプロジェクトを新規作成し、関連依存をインポートします.pomファイルの内容は次のとおりです.
    pomファイル
    
    
    
      4.0.0
    
      com.lyy
      spring_security_1
      1.0-SNAPSHOT
      war
    
      spring_security_1 Maven Webapp
      
      http://www.example.com
    
      
        UTF-8
        5.0.2.RELEASE
        1.6.6
        1.2.12
        5.1.6
        3.4.5
        5.0.1.RELEASE
      
    
      
        
          org.aspectj
          aspectjweaver
          1.6.8
        
        
          org.springframework
          spring-aop
          ${spring.version}
        
        
          org.springframework
          spring-context
          ${spring.version}
        
        
          org.springframework
          spring-context-support
          ${spring.version}
        
        
          org.springframework
          spring-web
          ${spring.version}
        
        
          org.springframework
          spring-orm
          ${spring.version}
        
        
          org.springframework
          spring-beans
          ${spring.version}
        
        
          org.springframework
          spring-core
          ${spring.version}
        
        
          org.springframework
          spring-test
          ${spring.version}
        
        
          org.springframework
          spring-webmvc
          ${spring.version}
    
        
        
          org.springframework
          spring-tx
          ${spring.version}
        
        
          junit
          junit
          4.12
          test
        
    
        
          javax.servlet
          javax.servlet-api
          3.1.0
          provided
        
        
          javax.servlet.jsp
          jsp-api
          2.0
          provided
        
        
          jstl
          jstl
          1.2
                
        
          log4j
          log4j
          ${log4j.version}
        
        
          org.slf4j
          slf4j-api
          ${slf4j.version}
        
        
          org.slf4j
          slf4j-log4j12
          ${slf4j.version}
                
    
        
          mysql
          mysql-connector-java
          ${mysql.version}
        
    
        
          org.mybatis
          mybatis
          ${mybatis.version}
        
        
          org.mybatis
          mybatis-spring
          1.3.0
        
        
          c3p0
          c3p0
          0.9.1.2
          jar
          compile
        
        
          com.github.pagehelper
          pagehelper
          5.1.2
        
        
          org.springframework.security
          spring-security-web
          ${spring.security.version}
        
        
          org.springframework.security
          spring-security-config
          ${spring.security.version}
        
        
          org.springframework.security
          spring-security-core
          ${spring.security.version}
        
        
          org.springframework.security
          spring-security-taglibs
          ${spring.security.version}
        
    
    
        
          javax.annotation
          jsr250-api
          1.0
        
    
        
          com.fasterxml.jackson.core
          jackson-databind
          2.9.7
        
    
        
          com.fasterxml.jackson.core
          jackson-core
          2.9.7
        
        
          org.projectlombok
          lombok
          1.16.16
        
      
    
      
        
          
            org.apache.tomcat.maven
              tomcat7-maven-plugin
                2.1
                  
                    80
                    /
                    UTF-8
                    tomcat7
                  
          
    
        
      
    
    

    Web.xmlでspring securityのフィルタを構成する
    web.xml
    
    
        spring security 01
    
        
            contextConfigLocation
            classpath:spring-security.xml,classpath*:applicationContext.xml
        
    
        
        
            org.springframework.web.context.ContextLoaderListener
        
    
        
            springSecurityFilterChain
            org.springframework.web.filter.DelegatingFilterProxy
        
        
            springSecurityFilterChain
            /*
        
    
        
        
            characterEncodingFilter
            org.springframework.web.filter.CharacterEncodingFilter
            
                encoding
                UTF-8
            
        
        
            characterEncodingFilter
            /*
        
    
        
            index.html
            index.htm
            index.jsp
            default.html
            default.htm
            default.jsp
        
    

    springとmybatis,springのプロファイルアプリケーションContext.xmlの統合
    スプリングプロファイル
    
    
    
        
        
        
        
    
        
    
        
        
        
            
            
            
            
        
    
        
        
            
            
        
    
        
        
            
        
    
        
        
        
            
        
    
        
    

    Spring securityプロファイル
    Spring securityのプロファイルの内容、spring-security.xml
    
    
    
        
    
        
        
        
    
        
            
            
    
            
            
            
            
    
            
            
        
        
            
            
            
        
    
    

    このプロファイルでは、認証用のuserService Beanを構成することに注意してください.
    
    

    ログインページの作成とログインに失敗したページlogin.html,failed.html
    2.ユーザ認証の実現
    新しいIUserServiceインタフェースUserDetailsServiceの継承
    package com.lyy.service;
    
    import org.springframework.security.core.userdetails.UserDetailsService;
    
    public interface IUserService extends UserDetailsService {
    
    }
    

    実装クラスは次のとおりです.
    @Service("userService")
    public class UserServiceImpl implements IUserService {
    
        @Autowired
        private IUserDao userDao;
    
        public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
            UserInfo userInfo = userDao.findByUsername(username);
            User user=new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(),getRoles());
            return user;
        }
    
        /*         */
        private List getRoles(){
            List list=new ArrayList();
            list.add(new SimpleGrantedAuthority("ROLE_USER"));
            list.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
            return list;
        }
    }

    ここでloadUserByUsernameメソッドではデータベース情報のクエリーが完了し、フレームワークに必要なユーザー情報にカプセル化されます.
    注意:
    UserInfoは、データベース・ユーザー情報をカプセル化するエンティティ・クラスです.
    getRolesはユーザーにロール情報を付与するために使用され、spring security認証時にユーザーはロール情報を持っていなければならない.ロール情報はデータベースから問合せられ、ここで直接エージェントに固定値を書いて示すことができる.
    ユーザパスワードに接続された「{noop}」文字列は、パスワードを暗号化していないため、フレームワークにパスワードを認証する際に暗号化する必要がないことを伝えます.
    3.テスト
    プロジェクトを開始し、localhostにアクセスすると、ログインページにジャンプし、データベースに存在するアカウントとパスワードを入力するとログインに成功し、トップページindex.htmlにジャンプします.
    三、まとめ
    データベースを使用して認証を完了する鍵は、UserDetailsServiceインタフェースを実装し、loadUserByUsernameメソッドでフレームワークに必要なUserDetailsオブジェクトをカプセル化することです.すなわち、Userオブジェクトはフレームワークに戻り、フレームワークによって後続の認証操作を完了します.
    認証に使用するuserServiceのbeanをspring securityのプロファイルに指定する必要があります.すなわち、loadUserByUsernameメソッドを実装したuserServiceです.
    サンプルエンジニアリングの具体的なコードを表示する必要がある場合は、下のリンクをクリックしてコードクラウドにサンプルエンジニアリングアドレスを表示します.