⒈处理用户信息获取逻辑

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

 package org.springframework.security.core.userdetails;

 /**
* 用户信息的获取逻辑是被SpringSecurity封装到UserDetailsService接口里面的
*/
public interface UserDetailsService { /**
* 根据通过用户输入的用户名得到用户信息,SpringSecurity会利用这些用户信息去做一些相应的处理和校验。
* 如果处理和检验都通过了,Spring会把这个用户放到Session里面。
* 如果找不到用户,则会抛出用户名不存在这个异常
* @param username
* @return
* @throws UsernameNotFoundException
*/
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
}
 package cn.coreqi.security.services;

 import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component; @Component
public class MyUserDetailsService implements UserDetailsService {
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
logger.info("登录用户名:" + s);
// 根据用户名查找用户信息
return new User(s,"admin",
true,true,true,true,
AuthorityUtils.commaSeparatedStringToAuthorityList("admin,ROLE_USER"));  //默认情况下,认证服务器的请求必须要有一个ROLE_USER的角色才能访问
}
}

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

     @Bean
public PasswordEncoder passwordEncoder(){
return NoOpPasswordEncoder.getInstance();
}

⒉处理用户检验逻辑

 package org.springframework.security.core.userdetails;

 import java.io.Serializable;
import java.util.Collection;
import org.springframework.security.core.GrantedAuthority; public interface UserDetails extends Serializable {
/**
* 获取用户权限列表
* @return
*/
Collection<? extends GrantedAuthority> getAuthorities(); /**
* 获取用户密码
* @return
*/
String getPassword(); /**
* 获取用户名
* @return
*/
String getUsername(); /**
* 账户是否过期
* @return true==没有过期,falst==账户已过期
*/
boolean isAccountNonExpired(); /**
* 账户是否被锁定,一般用来判断账户是否被冻结
* @return
*/
boolean isAccountNonLocked(); /**
* 账户密码是否过期
* @return true==没有过期,falst==已过期
*/
boolean isCredentialsNonExpired(); /**
* 账户是否可用,一般用来判断账户是否被删除
* @return
*/
boolean isEnabled();
}

⒊处理用户密码加密解密

 package org.springframework.security.crypto.password;

 public interface PasswordEncoder {

     /**
* 把用户的密码进行加密,新增用户的时候需要我们调用
* @param var1
* @return
*/
String encode(CharSequence var1); /**
* 判断加密后的密码和用户输入的密码是否匹配,SpringSecurity自动调用
* @param var1
* @param var2
* @return
*/
boolean matches(CharSequence var1, String var2); /**
*
* @param encodedPassword
* @return
*/
default boolean upgradeEncoding(String encodedPassword) {
return false;
}
}
     @Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder(); //推荐使用这个
}

SpringSecurity自定义用户认证逻辑的更多相关文章

  1. SpringSecurity 自定义用户 角色 资源权限控制

    SpringSecurity 自定义用户 角色 资源权限控制 package com.joyen.learning.security; import java.sql.ResultSet; impor ...

  2. 使用django实现自定义用户认证

    参考资料:https://docs.djangoproject.com/en/1.10/topics/auth/customizing/    直接拉到最后看栗子啦 django自定义用户认证(使用自 ...

  3. SpringSecurity个性化用户认证流程

    ⒈自定义登录页面 package cn.coreqi.security.config; import org.springframework.context.annotation.Bean; impo ...

  4. YII2中自定义用户认证模型,完成登陆和注册

    有些时候我们需要自已定义用户类,操作自已建的用户表,来完成登陆和注册功能. 用户表结构如下,当然可以根据自已的需要添加或删除: CREATE TABLE `tb_user` ( `id` int(11 ...

  5. SpringSecurity自定义用户登录

    根据上一节的配置,默认在服务开启的时候会被要求自动的进行表单登陆.用到的用户名只能是一个固定的用户名user,它的密码是每次启动的时候服务器自动生成的.最常见的场景是我们的用户是从数据库中获取的. 1 ...

  6. spring Security的自定义用户认证

    首先我需要在xml文件中声明.我要进行自定义用户的认证类,也就是我要自己从数据库中进行查询 <http pattern="/*.html" security="no ...

  7. Django自定义用户认证

    自定义一个用户认证 详细参考官方文档: https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#django.contrib.au ...

  8. CMDB资产管理系统开发【day25】:Django 自定义用户认证

    官方文档:https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#substituting-a-custom-user-mode ...

  9. Django自定义用户认证系统之自定义用户模型

    参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...

随机推荐

  1. PubMed数据下载

    目标站点分析 目标:抓取页面中的机构名称,日期,标题,作者, 作者信息, 摘要 程序实现 # -*- coding: utf-8 -*- """ @Datetime: 2 ...

  2. windows系统下mysql-8.0.13-winx64(zip安装)

    一.下载地址: http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.13-winx64.zip 二.安装: 1.解压: mysql根路 ...

  3. Git(使用码云)

    使用GitHub时,国内的用户经常遇到的问题是访问速度太慢,有时候还会出现无法连接的情况(原因你懂的). 如果我们希望体验Git飞一般的速度,可以使用国内的Git托管服务——码云(gitee.com) ...

  4. redis互斥锁简易设计原理【原】

    redis互斥锁设计 方式一: 使用 set(arg1,arg2,arg3,arg4,arg5) 绿线部分代码 //如果不存在就设置,且设置成功60秒后key自动失效,成功会返回字符串"OK ...

  5. Springboot中Feign的使用总结

    Feign是Webservice服务的客户端,创建接口+注解就可完成,实现简单 客户端通过@EnableFeignClients开启Feign的支持功能 @SpringBootApplication ...

  6. js方法参数中含有单引号双引号的处理

    最近在做项目时,遇到一个问题.当在js脚本中,拼接生成一个tr,然后添加到一个表格里. //假定testval是从后台传过来的数据 var testval = "含有'半角单引号的字符串&q ...

  7. 031、none和host网络的适用场景(2019-02-18 周一)

    参考https://www.cnblogs.com/CloudMan6/p/7053617.html   本节开始,会学习docker的几种原生网络,以及如何创建自定义网络.然后探究容器之间如何通信, ...

  8. 几个js 拓扑图库

    计划做一个元数据平台, 因为要包含血缘分析功能, 所以要调研一下js 拓扑图库, 候选对象主要参考知乎上的问答, javascript 有哪些适合做网络拓扑图形展示的包? https://www.zh ...

  9. C#子类重写父类函数的两种方法

    (1)使用Virtual关键字Override从写 父类子类代码如下,不能修改public 为其它权限 public virtual void Clear() { UpdateView(); } pu ...

  10. TCP回射服务器修订版(ubuntu 18.04)

    一.需求 把https://www.cnblogs.com/soldierback/p/10673345.html中的TCP回射服务器程序重写成使用select来处理任意个客户的单进程 程序,而不是为 ...