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

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

大家好,又见面了,我是你们的朋友全栈君。

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

1.1 UserDetailsService在身份认证中的作用

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

验证身份就是加载响应的UserDetails,看看是否和用户输入的账号、密码、权限等信息匹配。此步骤由实现AuthenticationProvider的DaoAuthenticationProvider(它利用UserDetailsService验证用户名、密码和授权)处理。包含 GrantedAuthority 的 UserDetails对象在构建 Authentication对象时填入数据。
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" />
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,就会产生下面的错误。

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

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

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

1.3 跟踪UserDetailsService。

身份认证的调用流程图如下,用户可下载Spring Security源代码跟踪调试。
Security身份认证之UserDetailsService[通俗易懂]

本文转自:[Spring Security身份认证之UserDetailsService](https://blog.csdn.net/shehun1/article/details/45394405)

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125133.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • SpringBoot项目中,如何更规范的使用PageHelper分页?

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:臣不贰 blog.csdn.net/NOT_TWO_CHEN/article/details/10923026…

  • 挖矿病毒攻击的排查处置手册

    挖矿病毒攻击的排查处置手册一、背景在用户不知情或未经允许的情况下,占用系统资源和网络资源进行挖矿,影响用户的网络和资源,从而获取虚拟币牟利。为了帮助应对恶意挖矿程序攻击,发现和清除恶意挖矿程序,防护和避免感染恶意挖矿程序,整理了如下针对挖矿活动相关的现状分析和检测处置建议。二、为什么会感染恶意挖矿程序通常遇到企业内网主机感染恶意挖矿程序,或者网站、服务器以及使用的云服务被植入恶意挖矿程序的时候,都不免提出“为什么会感染恶意挖矿程序,以及是如何感染的”诸如此类的问题,目前感染恶意挖矿程序的主要方式:2.1.利用类似其他病毒木

  • 转载:多年iOS开发经验总结[通俗易懂]

    转载:多年iOS开发经验总结[通俗易懂]转载:http://www.jianshu.com/p/1ff9e44ccc78总结了几个月的东西终于能和大家分享了,不多说,直接看东西!1、禁止手机睡眠2、隐藏某行cell3、禁用butto

  • 黑客入门视频教程(共57个)全实战过程

    黑客入门视频教程(共57个)全实战过程黑客入门视频教程(共57个)全实战过程 01ping命令的使用http://images.enet.com.cn/eschool/wmv/ping.wmv02netstat命令的使用http://images.enet.com.cn/eschool/wmv/netstat.wmv03tasklist和taskkill的使用h…

  • 八数码问题-A*(AStar)算法实现[通俗易懂]

    八数码问题-A*(AStar)算法实现[通俗易懂]八数码问题可以说得上是搜索问题中比较经典的,可以有很多种搜索策略,比如说有最常见的BFS,DFS,此外,A*也是一个比较普遍的搜索算法。在八数码问题A*往往可以得到最优的求解路径。

  • 快排优化Python表示「建议收藏」

    基本快速排序分析以从小到大排序为例*选取一个主元(选取方式多样)*利用主元,将序列分为两个子序列,左侧都比主元小,右侧都比主元大。*对两个子序列重复此操作例如取第一个元素,代码表示如下:defqsort(arr):iflen(arr)<=1:returnarrelse:pivot=arr[0]r

发表回复

您的电子邮箱地址不会被公开。

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