Spring Security身份认证之UserDetailsService[通俗易懂]

Spring Security身份认证之UserDetailsService[通俗易懂]        之前我们采用了配置文件的方式从数据库中读取用户进行登录。虽然该方式的灵活性相较于静态账号密码的方式灵活了许多,但是将数据库的结构暴露在明显的位置上,绝对不是一个明智的做法。本文通过Java代码实现UserDetailsService接口来实现身份认证。  1.1UserDetailsService在身份认证中的作用  SpringSecurity中进行身份验证的是Aut…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定
        之前我们采用了配置文件的方式从数据库中读取用户进行登录。虽然该方式的灵活性相较于静态账号密码的方式灵活了许多,但是将数据库的结构暴露在明显的位置上,绝对不是一个明智的做法。本文通过Java代码实现UserDetailsService接口来实现身份认证。

    1.1 UserDetailsService在身份认证中的作用

    Spring Security中进行身份验证的是AuthenticationManager接口,ProviderManager是它的一个默认实现,但它并不用来处理身份认证,而是委托给配置好的AuthenticationProvider,每个AuthenticationProvider会轮流检查身份认证。检查后或者返回Authentication对象或者抛出异常。

    验证身份就是加载响应的UserDetails,看看是否和用户输入的账号、密码、权限等信息匹配。此步骤由实现AuthenticationProvider的DaoAuthenticationProvider(它利用UserDetailsService验证用户名、密码和授权)处理。包含 GrantedAuthority 的 UserDetails对象在构建 Authentication对象时填入数据。

Spring Security身份认证之UserDetailsService[通俗易懂]

1.2 配置UserDetailsService

    1.2.1 更改Spring-Security.xml中身份的方式,使用自定义的UserDetailsService。

<security:authentication-manager> 
	<security:authentication-provider user-service ref="favUserDetailService">     
	</security:authentication-provider>
</security:authentication-manager>
<bean id="favUserDetailService" class="com.favccxx.favsecurity.security.FavUserDetailService" />

Jetbrains全家桶1年46,售后保障稳定

    1.2.2 新建FavUserDetailsService.java,实现UserDetailsService接口。为了降低学习的难度,这里并没有与数据库进行集成,而是采用模拟从数据库中获取用户的方式进行身份验证。示例代码如下:

package com.favccxx.favsecurity.security;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
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;

public class FavUserDetailService implements UserDetailsService {
	private static final Logger logger = LogManager.getLogger(FavUserDetailService.class);  
	/**  * 根据用户名获取用户 - 用户的角色、权限等信息   */
	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {      
		UserDetails userDetails = null;     
		try {           
			com.favccxx.favsecurity.pojo.User favUser = new com.favccxx.favsecurity.pojo.User();            
			favUser.setUsername("favccxx");        
			favUser.setPassword("favccxx");         
			Collection<GrantedAuthority> authList = getAuthorities();         
			userDetails = new User(username, favUser.getPassword().toLowerCase(),true,true,true,true,authList);     
		}catch (Exception e) {         
			e.printStackTrace();        
		}       
		return userDetails; 
	}
	/**  * 获取用户的角色权限,为了降低实验的难度,这里去掉了根据用户名获取角色的步骤     * @param    * @return   */ 
	private Collection<GrantedAuthority> getAuthorities(){        
		List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>();       
		authList.add(new SimpleGrantedAuthority("ROLE_USER"));      
		authList.add(new SimpleGrantedAuthority("ROLE_ADMIN"));     
		return authList;    
	}
}

    1.2.3 启动应用服务器,只要用户名和密码不全是favccxx,就会产生下面的错误。

Spring Security身份认证之UserDetailsService[通俗易懂]

    用户名和密码都输入favccxx,则登陆成功

Spring Security身份认证之UserDetailsService[通俗易懂]

1.3 跟踪UserDetailsService。

    身份认证的调用流程图如下,用户可下载Spring Security源代码跟踪调试。


Spring Security身份认证之UserDetailsService[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226766.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LoadRunner11下载以及详细激活成功教程说明

    LoadRunner11下载以及详细激活成功教程说明http://blog.csdn.net/oyzl68/article/details/9973143前期准备:LoadRunner11下载请猛戳这里 传送门LoadRunner激活成功教程文件下载请猛戳这里 传送门LoadRunner注册表清理工具下载请猛戳这里 传送门LoadRunner11激活成功教程方法:一、覆盖激活成功教程文件首先请下载LoadRunner激活成功教程文件,

    2022年7月22日
    12
  • vue分页功能[通俗易懂]

    vue分页功能[通俗易懂]分页分页、查询、重置、修改、删除分页、查询、重置、修改、删除vue中的分页使用频繁,在此记录一下。因为分页一般和增删查改等一起使用,所以写了一套。若是没有使用到其他功能,可以直接删除,只使用分页功能。pagination:{total:0,current:1,pageSize:10,//每页中显示10条数据pageSizeOptions:[“10″,”20″,”30”],//每页中显示的数据

    2022年10月1日
    5
  • BAPI 记录

    BAPI 记录采购订单BAPI_PO_CREATE1采购订单创建交货单BAPI_OUTB_DELIVERY_CREATE_STO根据凭证类型获取TVAK-VBTYP判断要创建的SO类别不同类别调用不同BAPI创建SOBAPI_SALESORDER_CREATEFROMDAT2创建SO退货BAPI_CUSTOMERRETURN_CREATE创建SO借贷项凭证SD_SALES…

    2022年7月24日
    8
  • 实验一:鸢尾花数据集分类「建议收藏」

    实验一:鸢尾花数据集分类一、问题描述二、数据集分析Iris鸢尾花数据集内包含3种类别,分别为山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。 数据集共150条记录,每类各50个数据,每条记录有花萼长度、花萼宽度、花瓣长度、花瓣宽度4项特征,通过这4个特征预测鸢尾花卉属于哪一品种。 iris数据集包含在sklearn库当中,具体在sklearn\datasets\data文件夹下,文件名为iris.c.

    2022年4月18日
    65
  • Readprocessmemory使用方法

    Readprocessmemory使用方法函数功能:该函数从指定的进程中读入内存信息,被读取的区域必须具有訪问权限。函数原型:BOOLReadProcessMemory(HANDLEhProcess,LPCVOIDlpBaseAddre

    2022年7月3日
    35
  • [渝粤教育] 西安工业大学 汉语文字学 参考 资料[通俗易懂]

    教育-汉语文字学-章节资料考试资料-西安工业大学【】请简要说明黄帝时期与半坡遗址之间的关系。第一章汉字的起源章测试题1、【多选题】请选从下列选项中找出“八卦”的用途()A、卜筮B、族徽C、计数D、装饰参考资料【】2、【多选题】请找出《周礼》中有关史官系统的名称()A、大史B、小史C、内史D、外史参考资料【】3、【多选题】请从下面选项中选出黄帝时期的特点。()A、战争B、纺织C、宫室D、穴居参考资料【】4、【判断题】文

    2022年4月7日
    116

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号