SpringSecurity自定义用户认证逻辑
⒈处理用户信息获取逻辑
用户信息的获取逻辑是被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自定义用户认证逻辑的更多相关文章
- SpringSecurity 自定义用户 角色 资源权限控制
SpringSecurity 自定义用户 角色 资源权限控制 package com.joyen.learning.security; import java.sql.ResultSet; impor ...
- 使用django实现自定义用户认证
参考资料:https://docs.djangoproject.com/en/1.10/topics/auth/customizing/ 直接拉到最后看栗子啦 django自定义用户认证(使用自 ...
- SpringSecurity个性化用户认证流程
⒈自定义登录页面 package cn.coreqi.security.config; import org.springframework.context.annotation.Bean; impo ...
- YII2中自定义用户认证模型,完成登陆和注册
有些时候我们需要自已定义用户类,操作自已建的用户表,来完成登陆和注册功能. 用户表结构如下,当然可以根据自已的需要添加或删除: CREATE TABLE `tb_user` ( `id` int(11 ...
- SpringSecurity自定义用户登录
根据上一节的配置,默认在服务开启的时候会被要求自动的进行表单登陆.用到的用户名只能是一个固定的用户名user,它的密码是每次启动的时候服务器自动生成的.最常见的场景是我们的用户是从数据库中获取的. 1 ...
- spring Security的自定义用户认证
首先我需要在xml文件中声明.我要进行自定义用户的认证类,也就是我要自己从数据库中进行查询 <http pattern="/*.html" security="no ...
- Django自定义用户认证
自定义一个用户认证 详细参考官方文档: https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#django.contrib.au ...
- CMDB资产管理系统开发【day25】:Django 自定义用户认证
官方文档:https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#substituting-a-custom-user-mode ...
- Django自定义用户认证系统之自定义用户模型
参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...
随机推荐
- https服务器配置部署
现在很多网站都要是https,包括我之前做的微信小程序都是需要使用https传输的,特将之前学习的记录下,以防忘记 一. 1.HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL / T ...
- python自动化开发-[第十八天]-django的ORM补充与ajax,分页器
今日概要: 1.ORM一对多,多对多 2.正向查询,反向查询 3.聚合查询与分组查询 4.F查询和Q查询 5.ajax 6.分页器 一.ORM补充: django在终端打印sql语句设置: LOGGI ...
- nginx配置模板问题404
nginx配置模板问题 一.nginx主配置文件如下 cat /etc/nginx/nginx.conf user nginx; worker_processes ; #error_log logs/ ...
- Maven 命令参数 整理
命令参数 备注 mvn -v --version 显示版本信息; mvn -V --show-version 显示版本信息后继续执行Maven其他目标; mvn -h --help 显示帮助信息; m ...
- Spring容器初始话原理图
l 主流程入口: ApplicationContext context = new ClassPathXmlApplicationContext(“spring.xml”) l ClassPathXm ...
- saltstack pillar
piller组件定义与客户端相关的任何数据(定义在master端),定义好的数据可以被其他组件调用(如state,api) 说通俗了,一句话,就是ansible vars里定义的变量,可以在整个pla ...
- SpringBoot笔记十七:热部署
目录 什么是热部署 Devtools热部署 什么是热部署 热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用. 举个例子,王者荣耀的更新有时候就是热部署,热更新,就是他提示你更新,更新40 ...
- JDBC-C3P0
一.依赖 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...
- css3好看的background渐变背景色积累
1. Tippy.js background: linear-gradient(91deg,#f1eefc,#9dc6ff 70%,#a5bcff);(body背景色) background: lin ...
- Enum入门【原】
package com.bobo.www.cxf.impl; public enum Traffic { Red(1), Green(2), Yellow(3);//必须最前面 private int ...