zoukankan      html  css  js  c++  java
  • SpringSecurity自定义用户认证逻辑

    ⒈处理用户信息获取逻辑

      用户信息的获取逻辑是被SpringSecurity封装到UserDetailsService接口里面的

     1 package org.springframework.security.core.userdetails;
     2 
     3 /**
     4  * 用户信息的获取逻辑是被SpringSecurity封装到UserDetailsService接口里面的
     5  */
     6 public interface UserDetailsService {
     7 
     8     /**
     9      * 根据通过用户输入的用户名得到用户信息,SpringSecurity会利用这些用户信息去做一些相应的处理和校验。
    10      * 如果处理和检验都通过了,Spring会把这个用户放到Session里面。
    11      * 如果找不到用户,则会抛出用户名不存在这个异常
    12      * @param username
    13      * @return
    14      * @throws UsernameNotFoundException
    15      */
    16     UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
    17 }
     1 package cn.coreqi.security.services;
     2 
     3 import org.slf4j.Logger;
     4 import org.slf4j.LoggerFactory;
     5 import org.springframework.security.core.authority.AuthorityUtils;
     6 import org.springframework.security.core.userdetails.User;
     7 import org.springframework.security.core.userdetails.UserDetails;
     8 import org.springframework.security.core.userdetails.UserDetailsService;
     9 import org.springframework.security.core.userdetails.UsernameNotFoundException;
    10 import org.springframework.stereotype.Component;
    11 
    12 @Component
    13 public class MyUserDetailsService implements UserDetailsService {
    14     private Logger logger = LoggerFactory.getLogger(getClass());
    15     @Override
    16     public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
    17         logger.info("登录用户名:" + s);
    18         // 根据用户名查找用户信息
    19         return new User(s,"admin", 
    20                 true,true,true,true,
    21                 AuthorityUtils.commaSeparatedStringToAuthorityList("admin,ROLE_USER"));  //默认情况下,认证服务器的请求必须要有一个ROLE_USER的角色才能访问
    22     }
    23 }

    因为SpringSecurity5以后的版本密码默认是加密的,所以我想你需要声明一下。

    1     @Bean
    2     public PasswordEncoder passwordEncoder(){
    3         return NoOpPasswordEncoder.getInstance();
    4     }

    ⒉处理用户检验逻辑

     1 package org.springframework.security.core.userdetails;
     2 
     3 import java.io.Serializable;
     4 import java.util.Collection;
     5 import org.springframework.security.core.GrantedAuthority;
     6 
     7 public interface UserDetails extends Serializable {
     8     /**
     9      * 获取用户权限列表
    10      * @return
    11      */
    12     Collection<? extends GrantedAuthority> getAuthorities();
    13 
    14     /**
    15      * 获取用户密码
    16      * @return
    17      */
    18     String getPassword();
    19 
    20     /**
    21      * 获取用户名
    22      * @return
    23      */
    24     String getUsername();
    25 
    26     /**
    27      * 账户是否过期
    28      * @return  true==没有过期,falst==账户已过期
    29      */
    30     boolean isAccountNonExpired();
    31 
    32     /**
    33      * 账户是否被锁定,一般用来判断账户是否被冻结
    34      * @return
    35      */
    36     boolean isAccountNonLocked();
    37 
    38     /**
    39      * 账户密码是否过期
    40      * @return  true==没有过期,falst==已过期
    41      */
    42     boolean isCredentialsNonExpired();
    43 
    44     /**
    45      * 账户是否可用,一般用来判断账户是否被删除
    46      * @return
    47      */
    48     boolean isEnabled();
    49 }

    ⒊处理用户密码加密解密

     1 package org.springframework.security.crypto.password;
     2 
     3 public interface PasswordEncoder {
     4 
     5     /**
     6      * 把用户的密码进行加密,新增用户的时候需要我们调用
     7      * @param var1
     8      * @return
     9      */
    10     String encode(CharSequence var1);
    11 
    12     /**
    13      * 判断加密后的密码和用户输入的密码是否匹配,SpringSecurity自动调用
    14      * @param var1
    15      * @param var2
    16      * @return
    17      */
    18     boolean matches(CharSequence var1, String var2);
    19 
    20     /**
    21      *
    22      * @param encodedPassword
    23      * @return
    24      */
    25     default boolean upgradeEncoding(String encodedPassword) {
    26         return false;
    27     }
    28 }
    1     @Bean
    2     public PasswordEncoder passwordEncoder(){
    3         return new BCryptPasswordEncoder(); //推荐使用这个
    4     }
  • 相关阅读:
    vb移动窗体的代码
    vb得到一个进程的启动参数?
    UTF8方式读写文件的模块
    JavaScript中Window.event详解
    vb设置窗体不可移动
    一拖二
    实习第一天
    사랑해
    决定考研
    Eclipse快捷键
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10616845.html
Copyright © 2011-2022 走看看