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的更多相关文章

  1. Apache Shiro和Spring Security的详细对比

    参考资料: 1)Apache Shiro Apache Shiro:http://shiro.apache.org/ 在Web项目中应用 Apache Shiro:http://www.ibm.com ...

  2. Spring Security资料

    Spring Security学习总结一 Spring Security3.1登陆验证 Spring security初探

  3. SpringBoot集成Spring Security(6)——登录管理

    文章目录 一.自定义认证成功.失败处理 1.1 CustomAuthenticationSuccessHandler 1.2 CustomAuthenticationFailureHandler 1. ...

  4. Spring Security基本原理

    近期研究了Spring Security,现进行记录. 首先先进行一个最简单的demo.默认情况下,在Spring Boot里,如果在classpath下面有Spring Security相关的jar ...

  5. Spring Security OAuth2 开发指南

    官方原文:http://projects.spring.io/spring-security-oauth/docs/oauth2.html 翻译及修改补充:Alex Liao. 转载请注明来源:htt ...

  6. spring mvc 和spring security配置 web.xml设置

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...

  7. SPRING SECURITY JAVA配置:Web Security

    在前一篇,我已经介绍了Spring Security Java配置,也概括的介绍了一下这个项目方方面面.在这篇文章中,我们来看一看一个简单的基于web security配置的例子.之后我们再来作更多的 ...

  8. 【OAuth2.0】Spring Security OAuth2.0篇之初识

    不吐不快 因为项目需求开始接触OAuth2.0授权协议.断断续续接触了有两周左右的时间.不得不吐槽的,依然是自己的学习习惯问题,总是着急想了解一切,习惯性地钻牛角尖去理解小的细节,而不是从宏观上去掌握 ...

  9. spring security oauth2.0 实现

    oauth应该属于security的一部分.关于oauth的的相关知识可以查看阮一峰的文章:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html ...

随机推荐

  1. Mybatis order by 动态传参出现的一个小bug

    大家好,我是老三,一个平平无奇的CRUD仔. 今天,我正在愉快地CRUD,突然发现出现一个Bug,我们来看看是怎么回事吧! 问题由来 一个简单的需求,要求把和当前用户相关的数据置顶展示. 这里,我用了 ...

  2. PAT甲级:1036 Boys vs Girls (25分)

    PAT甲级:1036 Boys vs Girls (25分) 题干 This time you are asked to tell the difference between the lowest ...

  3. P7003 [NEERC2013]Hack Protection

    P7003 [NEERC2013]Hack Protection 题意 给定一个序列 \(a\) ,求有多少个区间满足区间内的数的异或和等于与的和的值. 思路 首先我们求一个异或前缀和 \(s\),对 ...

  4. PGSQL存储过程学习

    一.存储过程定义:   存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参 ...

  5. C++第四十一篇 -- 安装成功的第一个驱动文件

    参考链接:https://blog.csdn.net/LEON1741/article/details/87291839 一.新建工程 二.写一个Driver.c #include <ntddk ...

  6. solr(CVE-2020-13957)文件上传

    影响版本 Apache Solr 6.6.0 - 6.6.5 Apache Solr 7.0.0 - 7.7.3 Apache Solr 8.0.0 - 8.6.2 环境搭建 下载环境 http:// ...

  7. CSRF+XSRF+SSRF简单介绍

    CSRF 使用DVWA靶机,选择low级别,然后更改密码 伪造网页连接 http://localhost:8083/DVWA-master/vulnerabilities/csrf/?password ...

  8. BUUCTF-[SUCTF 2019]CheckIn(.user.ini利用+exif_imagetype绕过)

    目录 分析 .user.ini使用条件 解题 参考链接 记一道.user.ini利用+exif_imagetype绕过的文件上传的题. 分析 先正经上传一张图片.回显了存储路径,同时发现还包含了一个i ...

  9. 【笔记】numpy.array的常用基本运算以及对数据的操作

    numpy.array的基本运算以及对数据的操作 设置一个问题,例如 这种只需要基本的运算就可以实现 类似的 numpy对向量的运算进行了优化,速度是相当快的,这种被称为universal funct ...

  10. 加载GIF图片优化方案

    前言 许多项目需要加载GIF图片,但是在直接使用UIImageView加载存在许多问题,于是查找资料做了一个加载GIF的Demo,思路来源. 思路 使用FLAnimatedImage来加载GIF图片, ...