⒈处理用户信息获取逻辑

  用户信息的获取逻辑是被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. C# 实现身份验证之WCF篇(2)

    前面总结了三种方法,今天又将分享三种方法,完成WCF篇. 第四种:SOAP Header验证 首先定义一个WCF服务契约及服务实现类(后面的各种验证均采用该WCF服务),我这里直接采用默认的代码,如下 ...

  2. qml: 组件复用

    在编写组件时,使用下面两种方法可以实现组件的复用: import QtQuick 2.0 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 a ...

  3. python自动化开发-[第二十三天]-初识爬虫

    今日概要: 1.爬汽车之家的新闻资讯 2.爬github和chouti 3.requests和beautifulsoup 4.轮询和长轮询 5.django request.POST和request. ...

  4. 如何优雅地使用Sublime Text3

    此文非原创,出处见文章结尾. 一.Sublime Text 3插件安装 优雅使用Sublime Text,插件则是不可缺少的存在:而插件的备份就显得非常的重要(譬如:各平台同步:更换系统/电脑,迅速使 ...

  5. 查询sql数据库中表占用的空间大小

    最近在给一家客户做系统维护时,需要查看数据库表的大小,相关的sql如下: 先在左上角下拉框中选对要查的数据库再执行以下语句 1. exec sp_spaceused '表名'          --( ...

  6. Ubuntu 云服务器上部署自己的 Rails 应用

    自学rails一段时间了,之前只用heroku部署了网站,想尝试把网站以一个更“正经”的方式呈现出来,就买了一个阿里云服务器.参考了网上部分rails部署教程,过程中也遇到了一些问题,所以在完成之后总 ...

  7. rpmbuild打包php

    安装php依赖库 mkdir -pv ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} php有一个依赖库,在yum源于epel源中都没有需要自己打包libico ...

  8. 数据库操作中如何批量执行多个sql文件?

    数据库操作中如何批量执行多个sql文件? 1.应用场景:在历史数据导入过程中,会发现有很多个表形成的.sql文件,要是一个一个文件去手动执行,实在是费时间,所以采取以下方法. 2.将文件放在一定位置, ...

  9. redis的安装与简单使用

    redis的安装与简单使用: Redis简介: redis的应用场景: 1.关于关系型数据库和nosql数据库 关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据     ...

  10. API(Scanner、Random、ArrayList、String、Arrays、Math)

    Scanner import java.util.Scanner; /* public int nextInt(): to get a integer from keyboard public Str ...