Spring Security 是一个强大且高度可定制的身份验证和访问控制框架,完全基于 Spring 的应用程序的标准,Spring Security 为基于 Java EE 的企业应用程序提供了一个全面的安全解决方案。

安全框架最主要包括两个操作

  • 认证(Authentication) 确认用户可以访问当前系统
  • 授权(Authorization) 确定用户在当前系统中是否能够执行某个操作,即用户所拥有的功能权限。

Spring Security 适配器

在 Spring Boot 当中配置 Spring Security 非常简单,创建一个自定义类继承 WebSecurityConfigurerAdapter,并在该类中使用 @EnableWebSecurity注解,就可以通过重写 config 方法来配置所需要的安全配置。

WebSecurityConfigurerAdapter 是 Spring Security 为 web 应用提供的一个适配器,实现了 WebSecurityConfigurer 接口,提供了两个方法用于重写开发者需要的安全配置。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {} @Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {} }

configure(HttpSecurity http) 方法中可以通过 HttpSecurityauthorizeRequests() 方法定义哪些 URL 需要被保护,哪些不需要被保护;通过 formLogin() 方法定义当前用户登录的时候,跳转到的登录界面。

configure(AuthenticationManagerBuilder auth) 方法用于创建用户和用户的角色。

用户认证

Spring Security 是通过在 configure(AuthenticationManagerBuilder auth) 完成用户认证的。使用 AuthenticationManagerBuilderinMemoryAuthentication() 方法可以向内存中添加用户,并给用户指定权限。

	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
super.configure(auth);
// 在内存中添加用用户,并给用户指定角色权限
auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN","DBA");
auth.inMemoryAuthentication().withUser("yang").password("123456").roles("USER");
}

上边的代码中添加了两个用户,其中一个用户名是 yang 密码是 123456 用户权限是 USER ; 另一个用户名是 admin 密码是 admin 用户权限是两个 ADMIN DBA 。 需要注意的是 Spring Security 保存用户权限的时候,会默认使用 ROLE_ ,也就是说, USER 实际上是 ROLE_USER, ADMIN 是 ROLE_ADMIN ,DBA 实际上是 ROLE_DBA

当然,也可以查询数据库获取用户和权限。

用户授权

Spring Security 是通过 configure(HttpSecurity http) 完成用户授权。

    @Override
protected void configure(HttpSecurity http) throws Exception {
http
//// 开始请求权限配置
.authorizeRequests()
// 我们指定任何用户都可以访问多个URL的模式。
// 任何用户都可以访问以"/resources/","/signup", 或者 "/about"开头的URL。
.antMatchers("/assets/**","/").permitAll()
// 请求匹配 /admin/** 只拥有 ROLE_ADMIN 角色的用户可以访问
.antMatchers("/yang/**").hasRole("ADMIN")
// 请求匹配 /user/** 拥有 ROLE_ADMIN 和 ROLE_USER 的角色用户都可以访问
.antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
// 任何以"/db/" 开头的URL需要同时具有 "ROLE_ADMIN" 和 "ROLE_DBA"权限的用户才可以访问。
// 和上面一样我们的 hasRole 方法也没有使用 "ROLE_" 前缀。
// .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")
// 其余所有的请求都需要认证后才可以访问
.anyRequest().authenticated(); http
.formLogin()
// 登陆界面;默认登陆成功后的界面(不起作用);默认登陆失败的界面;表单提交地址
.loginPage("/login.html")
.loginProcessingUrl("/login")
.failureUrl("/login.html?error")
.permitAll()
.and()
.rememberMe()
.tokenValiditySeconds(1209600)
.key("rememberme")
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login.html")
.permitAll(); http
.formLogin().defaultSuccessUrl("/index.html"); }

Spring Boot 的 Security 安全控制的更多相关文章

  1. spring boot之security

    上一节的时候,我们打开了springboot的端点,有一些数据是非常敏感的,比如/shutdown. 这一节,我们要给一些敏感信息加上权限控制. spring boot本身的security模块就很好 ...

  2. spring boot + thymeleaf +security自定义规则 的简单使用

    1.前言 以前开发一直使用 springMVC模式开发 ,前端页面常使用 JSP  ,现在html5淘汰了 ,要么使用html ,要么使用vue , 现在使用spring boot ,有必要总结一下 ...

  3. Spring Boot 配置 Security 密码加密

    依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri ...

  4. Spring Boot Security配置教程

    1.简介 在本文中,我们将了解Spring Boot对spring Security的支持. 简而言之,我们将专注于默认Security配置以及如何在需要时禁用或自定义它. 2.默认Security设 ...

  5. 一键式Spring集成工具 Spring Boot

    最近公司使用Spring boot进行开发,稍微了解一下,不过自我感觉把集中式配置applicate.properties搞明白,注解用过Spring MVC的boot绝对没问题的 比如拦截器:@As ...

  6. Spring Boot开发之流水无情(二)

    http://my.oschina.net/u/1027043/blog/406558 上篇散仙写了一个很简单的入门级的Spring Boot的例子,没啥技术含量,不过,其实学任何东西只要找到第一个突 ...

  7. Spring Boot中使用Spring Security进行安全控制

    我们在编写Web应用时,经常需要对页面做一些安全控制,比如:对于没有访问权限的用户需要转到登录表单页面.要实现访问控制的方法多种多样,可以通过Aop.拦截器实现,也可以通过框架实现(如:Apache ...

  8. Spring Boot教程(二十六)使用Spring Security安全控制

    准备工作 首先,构建一个简单的Web工程,以用于后续添加安全控制,也可以用之前Chapter3-1-2做为基础工程.若对如何使用Spring Boot构建Web应用,可以先阅读<Spring B ...

  9. Spring Boot中使用 Spring Security 构建权限系统

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...

随机推荐

  1. 解决使用vue-cli生成项目后项目地址自动添加#号的问题

    vue-router官网https://router.vuejs.org/zh/guide/ vue的路由在默认的hash模式下,url会带有一个#,不美观,而且在微信分享,授权登录等都会有一些坑.所 ...

  2. FFmpeg开发环境构建

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10035365.html 1. 相关资源介绍 本文主要讲述 linux 平台 x86(及x ...

  3. git remote: HTTP Basic: Access denied 错误解决办法

    问题描述: git push 报 HTTP Basic: Access denied 错误 原因:本地git配置的用户名.密码与gitlabs上注册的用户名.密码不一致. 解决方案: 1. 如果账号密 ...

  4. 几句话的事儿,LogBack急速使用

    1.说说logback 在java的世界里面好像从来只有log4j,因为它是在太有名气了.说实话,我也没觉得它那里不好,至少在我自己的项目里,它工作的好好的.但是主流有一种声音,在慢慢的放弃它,最始作 ...

  5. 使用EF CodeFirst连接MySql数据库

    如何使用EF CodeFirst连接MySql数据库? 我们这篇文章介绍怎么使用EF连接MySql 作者的环境 VS2017.Win10.MySql5.x 前言 一般在EF中,默认是使用SqlServ ...

  6. 关于ASPxComboBox通过ClientInstanceName,js获取不到控件的问题

    今天突然遇到一个很奇葩的问题 ASPxComboBox中设置了ClientInstanceName.但是通过cmbOrganization.GetValue()获取不到值. 报错cmbOrganiza ...

  7. HLOCAL 初探

    首先看一段程序,输出的结果为两个相同的整数(这两个整数是内存地址). #include "stdafx.h" #include <windows.h> int _tma ...

  8. SQL 通配符的使用?三种

    SQL 通配符 通配符可用于替代字符串中的任何其他字符. SQL 通配符 在 SQL 中,通配符与 SQL LIKE 操作符一起使用. SQL 通配符用于搜索表中的数据. 在 SQL 中,可使用以下通 ...

  9. 理解Java序列化

    前言 Java对象是在JVM中产生的,若要将其进行传输或保存到硬盘,就要将对象转换为可传输的文件流.而目前Java对象的转换方式有: 利用Java的序列化功能序列成字节(字节流),一般是需要加密传输时 ...

  10. 内联元素的padding和margin

    首先区分一下3类元素: 1)块级元素:div.p等这一类具有宽高属性,且单独占一行的元素: 2)占位元素:img.input这一类具有宽高属性.紧随上一个元素不单独占一行的元素: 3)内联元素:spa ...