Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring Security 简单配置用户存储

Spring Security 简单配置用户存储

作者头像
Tim在路上
发布于 2020-08-04 15:47:22
发布于 2020-08-04 15:47:22
78100
代码可运行
举报
运行总次数:0
代码可运行

spring Security从两个角度解决安全问题:

  • 使用servlet中的filter来保护web请求,并限制url级别的访问。
  • 使用Aop的方法,借助于对象代理和使用通知,来限制用户访问。

Spring Security可以使用java进行简单的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{}

@EnableWebSecurity注解将会启动Web安全功能,但它本身并没有什么功能。Spring Security必须配置在一个实现了WebSecurityConfigurer的bean中,或者扩展WebSecurityConfigurerAdapter,扩展该类是最简单的配置方法。

我们可以通过重载WebSecurityConfigurerAdapter中的一个或多个方法来指定Web安全的细节。

WebSecurityConfigurerAdapter的三个configure()方法:configure(WebSecurity)、configure(HttpSecurity)、configure(AuthenticationManagerBuilder)

三个实现类分别作用为:configure(AuthenticationManagerBuilder)配置user-detail服务,configure(WebSecurity)配置Spring Security的filter链,configure(HttpSecurity)配置如何通过拦截器保护请求。

每一个用户都应该具有自己信息存储的地方,这样可以方便的进行认证,个性化定制等等。

Spring Security可以实现内存、关系型数据库以及LDAP用户存储的定制。

基于内存的用户存储

继承WebSecurityConfigurerAdapter需要重写的第一个方法就是关于用户细节的。

通过inmMemoryAuthentication()方法,我们可以启用、配置并任意填充基于内存的用户存储。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception{
        auth.inMemoryAuthentication().withUser("user").password("password").roles("USER").and().withUser("admin").password("password").roles("USER","ADMIN");
    }
}

withUser()方法返回的是UserDetailsManagerConfigurer.UserDetailsBuilder,这个对象提供了多个进一步配置用户的方法,如上面的为用户设置密码的password()方法、授予用户多个角色权限的roles()方法。

常见的方法有,accountLocked(boolean)判断用户是否锁定,authorites()授予某一个用户一项或多项权限。soles()授予某个用户一项或多项权限

基于数据库表的认证
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected void configure(Authentication auth) throws Exception{
    auth
      .jdbcAuthentication()
         .dataSource(dataSource)
            .usersByUsernameQuery("select username,password,true from Spitter where username=?")
            .authoritiesByUsernameQuery("select username,'ROLE_USER' from Spitter where username=?");
}

我们使用JDBCAuthentication()方法来实现一JDBC为支撑的用户存储,必须要配置的只是一个DataSource,就能访问关系型数据库

passwordEncoder()方法可以接受Spring Security中PasswordEncoder接口的任意实现。Spring Security的加密模块包括三个这样的实现:BCryptPasswordEncoder、NoOpPasswordEncoder和StandardPasswordEncoder。

基于LDAP认证
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected void configure(Authentication auth) throws Exception{
    auth
      .ldapAuthentication()
         .userSearchFilter("(uid={0})")
         .groupSearchFilter("member={0}");
}
配置自定义的用户服务

如果我们需要认证的用户存储在非关系型数据库中,如Mongo或Neo4j,那么我们需要提供一个自定义的UserDetailsService接口实现。UserDetailsService接口非常简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface UserDetailsService{
    UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
}

我们需要做的就是实现loadUserByUsername()方法,根据给定的用户名来查找用户。该方法会返回代表给定用户的UserDetails对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Autowired
SpitterRepository spitterRepository;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception{
   auth.userDetailsService(new SpitterUserSevice(spitterRepository));
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring boot项目集成security
在进行框架选型时最常用的选择就是在Spring security 和Shiro中进行抉择,Spring security 和 shiro 一样,都具有认证、授权、加密等用于权限管理的功能。但是对于Springboot而言,Spring Security比Shiro更合适一些,他们都是Spring生态里的内容,并且在使用上Spring boot只需要引入Security就可以实现基础的登陆验证。
余生大大
2022/11/02
3630
Spring boot项目集成security
《Spring实战》摘录 - 17
问题: #9.1.3-2 | Spring Security必须配置在一个什么样的bean中
用户1335799
2019/05/15
5230
《Spring实战》摘录 - 17
Spring Security 认证的三种方式及简单的授权
在pom.xml文件映入SpringSecutrity依赖启动器,启动项目,访问文章列表页面时,出现默认的登录页,需要用默认用户名:user,密码源于控制台输出,也就是最基础的登录
慕容千语
2020/12/18
3.8K0
让Spring Security 来保护你的Spring Boot项目吧
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
100000860378
2018/09/13
1.1K0
让Spring Security 来保护你的Spring Boot项目吧
【Spring Security】003-Spring Security web权限方案(1):用户认证
在resources目录下创建static目录,并创建login.html,name必须是username和password;
訾博ZiBo
2025/01/06
910
【Spring Security】003-Spring Security web权限方案(1):用户认证
Spring 全家桶之 Spring Security(一)
  Spring Security是基于Spring的安全框架,Spring Security提供全面的安全性解决方案,同时在Web Request和Method处理身份认证和授权,在Spring Framework基础上,Spring Security充分利用了Soring的 DI和AOP特性,为应用系统提供了声明式的安全访问控制功能,是一个轻量级的框架,可以很好的与Spring及Spring MVC集成
RiemannHypothesis
2022/08/19
5550
Spring 全家桶之 Spring Security(一)
Spring Security权限控制
Spring Security官网 : https://projects.spring.io/spring-security/
二十三年蝉
2022/03/10
1.5K0
Spring Security权限控制
SpringSecurity + JWT,从入门到精通!
RBAC 全称为基于角色的权限控制,本段将会从什么是 RBAC,模型分类,什么是权限,用户组的使用,实例分析等几个方面阐述 RBAC,绘制思维导图如下:
后端码匠
2020/07/14
5.3K3
Spring Security 上
FilterSecurityInterceptor:是一个方法级的 权限过滤器 ,基本位于过滤链的最底部
张小驰出没
2021/05/08
6540
Spring Security  上
Spring Boot的安全配置(一)
Spring Boot是一个非常流行的Java开发框架,提供了各种实用的功能和组件来快速构建应用程序。安全是任何Web应用程序开发的关键方面,因为它涉及到用户的身份验证和授权。Spring Boot提供了一些安全功能来保护Web应用程序免受恶意攻击,包括身份验证、授权、加密、防止跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等。
堕落飞鸟
2023/04/05
1.2K0
Spring Security 在 Spring Boot 中的使用【集中式】
  创建好一个空的 Spring Boot 项目之后,写一个 controller 验证此时是可以直接访问到该控制器的。
Demo_Null
2020/10/28
2.5K0
Spring Security 在 Spring Boot 中的使用【集中式】
Spring学习笔记(三十四)——Springboot集成Spring Security
spring security 是基于 spring 的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。在 Spring Framework 基础上,spring security 充分利用了依赖注入(DI)和面向切面编程(AOP)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。是一个轻量级的安全框架。它与 Spring MVC 有很好地集成.
不愿意做鱼的小鲸鱼
2022/09/26
1.6K0
Spring学习笔记(三十四)——Springboot集成Spring Security
万字长文,SpringSecurity
[wp_editor_md_ce446408a534c04c207dbf04846f415a.jpg]
mySoul
2020/06/30
7560
Spring Boot Security认证:Redis缓存用户信息
在Web应用中,安全性是一个至关重要的方面。Spring Security是Spring框架提供的安全框架,用于处理身份验证(Authentication)和授权(Authorization)等安全问题。在一些场景下,为了提高系统性能,我们需要将用户信息缓存起来,以减轻对数据库的访问压力。本文将介绍如何使用Spring Boot Security进行认证,并通过Redis缓存用户信息,实现更高效的身份验证。
IT_陈寒
2023/12/25
8610
Spring Boot Security认证:Redis缓存用户信息
学习学习SpringSecurity
SpringSecurity是Spring下的一个安全框架,与shiro 类似,一般用于用户认证(Authentication)和用户授权(Authorization)两个部分,常与与SpringBoot相整合。
mySoul
2020/06/07
5990
公司新来了一个同事,把权限系统设计的炉火纯青!
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/08/29
2580
公司新来了一个同事,把权限系统设计的炉火纯青!
Spring 全家桶之 Spring Security(二)
  授权的主要作用是给登录系统的用户的角色授予该角色角色所能访问的菜单列表或者能操作的功能
RiemannHypothesis
2022/08/19
4200
Spring 全家桶之 Spring Security(二)
springboot系列学习(二十四):springboot项目里面整合spring Security框架。一步一步带你整合使用,小白必看(一)
我们的一个普通项目,没有安全的限制也是可以使用的,但是在公司里面,安全就是必须的,不是说非要使用安全框架springsecurity框架。之前我们学过的过滤器,拦截器也是可以实现一定的项目的安全。
一写代码就开心
2020/11/20
7640
springboot系列学习(二十四):springboot项目里面整合spring  Security框架。一步一步带你整合使用,小白必看(一)
Spring Boot整合新版Spring Security:Lambda表达式配置优雅安全
Spring Security是一个用于身份验证和授权的框架,它提供了一套全面的安全服务,可轻松集成到Spring应用程序中。新版Spring Security引入了lambda表达式的配置方式,取代了之前的繁琐XML配置和方法调用链式配置,使得配置更加清晰、简洁。
IT_陈寒
2024/05/24
1960
Spring Boot整合新版Spring Security:Lambda表达式配置优雅安全
【Java】保护你的应用:深入探讨Spring Security的应用与最佳实践
在当今数字化时代,信息安全已成为应用开发中至关重要的一环。Spring Security作为Spring生态系统中的一个关键组件,为应用提供了强大的身份验证和访问控制功能。本文将深入探讨Spring Security的应用,介绍其核心概念、功能以及在实际项目中的最佳实践。
人不走空
2024/02/21
2050
【Java】保护你的应用:深入探讨Spring Security的应用与最佳实践
推荐阅读
相关推荐
Spring boot项目集成security
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验