初探Spring Security
Spring Security
简介
Spring Security是Spring家族中的一个组成框架,具有强大且高度可定制的身份验证和访问控制功能,致力于为Java应用程序提供身份的验证和授权
(先来一个小案例叭)
本人的环境如下
IDEA:2019.3.5
Maven: 3.6.3
JDK: 1.8
1.创建一个Maven项目

2.引入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<!--spring boot web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Spring Security-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
3.创建启动类
@SpringBootApplication
public class SecurityApplication {
public static void main(String[] args) {
SpringApplication.run(SecurityApplication.class, args);
}
}
4.写一个测试方法(Controller层)
@RestController
@RequestMapping("/test")
public class SecurityController {
@RequestMapping("sayHello")
public String sayHello() {
return "Hello Spring Security";
}
}
然后我们就可以启动我们的小demo啦,启动的时候输出控制台会打印Spring Security的登录密码(每次启动都会重新初始化),是由UUID生成的,用户名默认是user,输入用户名和密码,登录就成功啦。

5.修改登录的用户名和密码
在resources目录下创建一个配置文件application.properties(application.yml),
# 自定义 spring security用户名和密码
spring.security.user.name=huang
spring.security.user.password=123456
不想要Spring Security的登录也是可以去掉的(关闭验证),只要把Security的自动配置去掉就可以啦,在启动类的@SpringBootApplication注解中添加就好。
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
6.基于内存的用户信息
有时候我们的用户名和密码太多,写在配置文件中不好,可以把用户名和密码保存到内存中进行管理。
1)要写一个配置类
一个继承了 WebSecurityConfigurerAdapter抽象类的类,重写它的 config 方法,在方法里面添加用户
//添加为配置类(相当于spring的xml文件)
@Configuration
//开启Spring Security功能
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//加密
PasswordEncoder pe = passwordEncoder();
auth.inMemoryAuthentication()
.withUser("huangxc")
.password(pe.encode("123456"))
.roles();
auth.inMemoryAuthentication()
.withUser("xian")
.password(pe.encode("654321"))
.roles();
auth.inMemoryAuthentication()
.withUser("admin")
.password(pe.encode("admin"))
.roles();
}
}
这样当我们启动项目时,就可以使用config方法里面配置的用户名和密码了。如果你的Spring Security版本是5(现在只出到5)的话,是会报错的(java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"),原因是密码不能使用明文的方式,要进行加密。
在配置类中加如下代码进行加密就好,PasswordEncoder是一个接口,有很多加密算法的子类,而 new BCryptPasswordEncoder就是其中一个。
//把方法添加到spring容器中
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
2)对用户添加角色
在项目中,一个用户往往可以具有多个角色的权限,可以在添加用户的时候进行设置,在roles方法中添加角色(可以添加多个),我这里以添加两个为例。

配置类上面添加一个注解
//开启方法级别的认证
@EnableGlobalMethodSecurity(prePostEnabled = true)
控制器中写两个方法来测试一下
@RequestMapping("commonUser")
//表示这个方法有两个角色
@PreAuthorize(value = "hasAnyRole('admin','normal')")
public String commonUser() {
return "Hello 只用户normal角色";
}
@RequestMapping("adminUser")
//表示这个方法只拥有 admin 这个角色
@PreAuthorize(value = "hasAnyRole('admin'")
public String adminUser() {
return "Hello 用户 admin 和 normal两个角色";
}
@PreAuthorize:进行方法前的验证,比如我admin这个用户去进行登录,两个方法都可以访问,如果是 huangxc或者是xian这两个用户去访问,只能访问commonUser()这个方法(温馨提示:每次测试的时候记得要轻触缓存)。
初探Spring Security的更多相关文章
- Apache Shiro和Spring Security的详细对比
参考资料: 1)Apache Shiro Apache Shiro:http://shiro.apache.org/ 在Web项目中应用 Apache Shiro:http://www.ibm.com ...
- Spring Security资料
Spring Security学习总结一 Spring Security3.1登陆验证 Spring security初探
- SpringBoot集成Spring Security(6)——登录管理
文章目录 一.自定义认证成功.失败处理 1.1 CustomAuthenticationSuccessHandler 1.2 CustomAuthenticationFailureHandler 1. ...
- Spring Security基本原理
近期研究了Spring Security,现进行记录. 首先先进行一个最简单的demo.默认情况下,在Spring Boot里,如果在classpath下面有Spring Security相关的jar ...
- Spring Security OAuth2 开发指南
官方原文:http://projects.spring.io/spring-security-oauth/docs/oauth2.html 翻译及修改补充:Alex Liao. 转载请注明来源:htt ...
- spring mvc 和spring security配置 web.xml设置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...
- SPRING SECURITY JAVA配置:Web Security
在前一篇,我已经介绍了Spring Security Java配置,也概括的介绍了一下这个项目方方面面.在这篇文章中,我们来看一看一个简单的基于web security配置的例子.之后我们再来作更多的 ...
- 【OAuth2.0】Spring Security OAuth2.0篇之初识
不吐不快 因为项目需求开始接触OAuth2.0授权协议.断断续续接触了有两周左右的时间.不得不吐槽的,依然是自己的学习习惯问题,总是着急想了解一切,习惯性地钻牛角尖去理解小的细节,而不是从宏观上去掌握 ...
- spring security oauth2.0 实现
oauth应该属于security的一部分.关于oauth的的相关知识可以查看阮一峰的文章:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html ...
随机推荐
- P3643 [APIO2016]划艇
P3643 [APIO2016]划艇 题意 一个合法序列可表示为一个长度为 \(n\) 的序列,其中第 \(i\) 个数可以为 0 或 \([l_i,r_i]\) 中一个整数,且满足所有不为零的数组成 ...
- Navicat Premium 12安装及破解
特别提醒,Navicat Premium 12安装包请用我给的链接下载,不然会无法破解 下载Navicat Premium 12地址:https://pan.baidu.com/s/1AQsryKpJ ...
- SpringBoot: 后台接口文档 - 基于Swagger3
目录 前言:什么是Swagger 起步:(只需简单的3步) 加载依赖 添加注解@EnableOpenApi 启动SpringBoot,访问Swagger后台界面 配置:基于Java的配置 注解:Swa ...
- 03_Nginx支持SSL
1.申请证书 https://freessl.cn/ 2.创建证书 3.离线生产 4.下载Keymanager https://keymanager.org/ 5.打开生产密钥 6.DNS验证 进入域 ...
- 第三篇 -- Go语言其他类型转String方法
1. int转string // 法1: int转string num_int := 10 num_str_2 := fmt.Sprintf("%b", num_int) fmt. ...
- 微信小程序组件学习 -- 注册页面
微信小程序组件使用手册地址: 1. 百度搜索"微信公众平台",扫码登录之后,点击帮助文档里面的普通小程序. 2. 接着选择"开发"-->"组件& ...
- [编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)
目录 一.SDCC(Small Device C Compiler)编译环境搭建 1.1.下载 1.2.编译 1.3.测试 二.Hex2Bin+命令行烧写工具配置使用 2.1.下载工具安装配置 2.2 ...
- 如何给html元素的onclick事件传递参数即如何获取html标签的data
某些非text元素,如a.button等用于触发时间的标签可已将要传的数据放在一个属性中,如data,这个属性必须是不影响样式的,可以使用任意非html定义的名字命名属性,然后将数据传到属性中, &l ...
- SpringBoot 默认json解析器详解和字段序列化自定义
前言 在我们开发项目API接口的时候,一些没有数据的字段会默认返回NULL,数字类型也会是NULL,这个时候前端希望字符串能够统一返回空字符,数字默认返回0,那我们就需要自定义json序列化处理 Sp ...
- 大都市meg DFS序
题目描述 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1..n的n个小村庄, ...