⒈处理用户信息获取逻辑

  用户信息的获取逻辑是被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. go实现Windows服务注册

    go实现Windows服务注册 1.nssm下载:http://nssm.cc/download 2.服务注册 nssm.exe install 服务名  程序 样例如下: .\nssm.exe in ...

  2. python django基础一web框架的本质

    web框架的本质就是一个socket服务端,而浏览器就是一个socker客户端,基于请求做出相应,客户端先请求,服务器做出对应响应 按照http协议的请求发送,服务器按照http协议来相应,这样的通信 ...

  3. 阿里RocketMq(TCP模式)

    针对公司业务逻辑,向阿里云MQ发送指定数据,消费端根据数据来做具体的业务,分两个项目,一个生产端(Producer).一个消费端(Consumer) 生产端通过定时任务执行sql向阿里云MQ发送数据, ...

  4. jQuery中获取a标签的值

    如题,一组相同action的a标签,不同的是a标签的内容为搜索内容.点击页面显示不同的数据 刚开始试过在 a标签中添加 value值 和id 的值,结果在jQuery中获取值均失败! 后来发现,根本不 ...

  5. css 绝对定位实现水平垂直居中

    负margin实现水平垂直居中 width: 500px; height: 500px; position: absolute; left: 50%; top :50%; margin-left: - ...

  6. 服务器中同一个【ip:port】可以多次accept的问题

    一.多次bind的问题 服务器的[ip:port]被某套接字绑定成功后,在该绑定解除之前,同一个[ip:port],不能再次被其他套接字绑定,否则绑定失败 二.多次accept的问题 有外来连接时,若 ...

  7. MySQL的一些基本命令笔记(2)

    1.逻辑运算符的补充 between 的用法:(在....之间) select column1,column2,......columnN from 表名 where columnX between ...

  8. UIScrollView嵌套的完美解决方案

    UIScrollView嵌套的完美解决方案 做iOS开发,不可避免的会遇到UIScrollView的嵌套问题,之前也曾遇到过,吭哧吭哧做完了,效果不理想,和产品大战好几回合,就那样了.不可避免的,又一 ...

  9. 手动写Entity Framework 数据库上下文和Model实体

    1.引用EF对应的程序集 使用命令安装EntityFramework包Install-Package EntityFramework Entity Framework简单目录: 1.context数据 ...

  10. Nginx下配置网站ssl实现https访问

    第一步:服务器环境,lnmp即Linux+Nginx+PHP+MySQL,本文中以我的博客为例,使用的是阿里云最低档的vps+免费的Linux服务器管理系统WDCP快速搭建的lnmp环境(同类产品还有 ...