核心功能

Spring Security提供了三个核心的功能:

认证(你是谁)

授权(你能干什么)

攻击防护(防止伪造身份)

一个简单例子

默认情况

在前面的开发中,都是将spring security功能禁用的,现在开启该功能,即在application.properties文件中把下面这句话注释掉即可。

# security.basic.enabled=false
# 注:在添加了BrowserSecurityConfig之后,security.basic.enabled这个配置就不管用了

重启应用会在控制台输出一个默认密码,对应的用户名是user

再访问http://localhost:8080/user/1时会提示输入用户名密码,默认情况下是httpBasic认证.

自定义认证模式

认证授权相关的代码写在各个模块里,处理浏览器相关的代码写在imooc-security-browser模块里。写在imooc-security-browser模块里的配置能在demo模块里起作用,原因是demo中的起动类在com.imooc包下,而BrowserSecurityConfig在com.imooc.security.browser.config包下,注意启动类和配置类所在的包,要不然配置类会不起作用的

httpBasic登录,在imooc-security-browser模块里添加如下配置类,实现了自定义的httpBasic登录,即默认的认证模式:

@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
System.out.println("BrowserSecurityConfig");
http.httpBasic() // httpBasic登录
.and()
.authorizeRequests() // 对请求做授权
.anyRequest() // 任何请求
.authenticated(); // 都需要身份认证
}
}

httpForm登录,下面的代码是基于表单的登录:

@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
System.out.println("BrowserSecurityConfig");
// 写法一:继承父类是formLogin登录
// super.configure(http); // 写法二
http.formLogin() // 表单登录
.and()
.authorizeRequests() // 对请求做授权
.anyRequest() // 任何请求
.authenticated(); // 都需要身份认证
}
}

基本原理

最核心的东西就是过滤器链,绿色过滤器可控制,用来处理表单登录,其他颜色过滤器不可控制,其中蓝色用来处理异常,橙色用来作最终能否访问的认证,REST API就是我们写的控制器。

请求到UsernamePasswordAuthenticationFilter,会判断是否是登录请求,是的话是否有用户名和密码并认证,到FilterSecurityInterceptor时会根据配置判断请求是否满足要求(是否已认证或不用认证),如果不满足就返回登录让用户登录认证信息。通过在上面几个控制器打断点,来分析一下:

启动应用并访问http://localhost:8080/user/1,首先会FilterSecurityInterceptor.java,对请求做验证,判断没有认证信息后抛出异常

异常信息被ExceptionTranslationFilter.java过滤器捕获并重定向到登录页面

从控制台复制密码,并在页面输入登录信息,点击登录按钮

登录请求被UsernamePasswordAuthenticationFilter.java过滤器拦截,并对用户信息进行认证

再次被FilterSecurityInterceptor.java拦截器拦截,按F8

最终访问/user/1对应的控制器

Spring Security之简单举例的更多相关文章

  1. spring security实现简单的url权限拦截

    在一个系统中,权限的拦截是很常见的事情,通常情况下我们都是基于url进行拦截.那么在spring security中应该怎么配置呢. 大致步骤如下: 1.用户登录成功后我们需要拿到用户所拥有的权限,并 ...

  2. Spring Security:简单的保护一个SpringBoot应用程序(总结)

    Spring Security 在 Java类中的配置 在 Spring Security 中使用 Java配置,可以轻松配置 Spring Security 而无需使用 XML . 在Spring ...

  3. spring security的简单应用

    本文只包涵spring security配置部分,不是一个完整项目,不过可以任意添加到一个web项目中,不需要对原来的程序做任何修改 部分内容来源于网络,如有雷同,毫无意外 1.xml配置文件 < ...

  4. Spring Boot 2.0 利用 Spring Security 实现简单的OAuth2.0认证方式1

    0. 前言 之前帐号认证用过自己写的进行匹配,现在要学会使用标准了.准备了解和使用这个OAuth2.0协议. 1. 配置 1.1 配置pom.xml 有些可能会用不到,我把我项目中用到的所有包都贴出来 ...

  5. Spring Boot 2.0 利用 Spring Security 实现简单的OAuth2.0认证方式2

    0.前言 经过前面一小节已经基本配置好了基于SpringBoot+SpringSecurity+OAuth2.0的环境.这一小节主要对一些写固定InMemory的User和Client进行扩展.实现动 ...

  6. Spring Security 入门(1-8)Spring Security 的配置文件举例

  7. spring security简单教程以及实现完全前后端分离

    spring security是spring家族的一个安全框架,入门简单.对比shiro,它自带登录页面,自动完成登录操作.权限过滤时支持http方法过滤. 在新手入门使用时,只需要简单的配置,即可实 ...

  8. Spring Security OAuth2 SSO

    通常公司肯定不止一个系统,每个系统都需要进行认证和权限控制,不可能每个每个系统都自己去写,这个时候需要把登录单独提出来 登录和授权是统一的 业务系统该怎么写还怎么写 最近学习了一下Spring Sec ...

  9. 【Spring】12、Spring Security 四种使用方式

    spring security使用分类: 如何使用spring security,相信百度过的都知道,总共有四种用法,从简到深为:1.不用数据库,全部数据写在配置文件,这个也是官方文档里面的demo: ...

随机推荐

  1. 写了一个web os脚手架

    预览地址在这里:http://thx.github.io/magix-os/项目地址在这里:https://github.com/thx/magix-os 介绍下目录结构 核心目录cores主要是构成 ...

  2. Message: 'geckodriver' executable needs to be in PATH

    1.下载geckodriver.exe:下载地址:mozilla/geckodriver请根据系统版本选择下载:(如Windows 64位系统) 2.下载解压后将getckodriver.exe复制到 ...

  3. Math类、Random类、System类、BigInteger类、BigDecimal类、Date类、SimpleDateFormat、Calendar类

    Math类* A:Math类概述 * Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数. * B:成员方法 * public static int abs(int a)  ...

  4. 华为交换机Stelnet ssh/rsa验证模式下16进制公钥生成方法

    1.生成秘钥 需要在你自己电脑上生成 执行下面命令,默认生成位置是~/.ssh ssh-keygen -t rsa -b 1024 -f yourkeyname -C "备注" 参 ...

  5. 常见的JVM 面试题

    1.讲一讲JVM的跨平台与跨语言 跨平台 我们写的一个类,在不同的操作系统上(Linux.windows.Mac OS)执行,效果是一样的.这就是JVM的跨平台性. 跨语言 JVM只识别字节码,JVM ...

  6. PyQt5 基本语法(五)

    目录 2. 输入控件(二) 2.2 步长调节 2.2.1 QAbstractSpinBox 2.2.1.1 描述 2.2.1.2 功能作用 2.2.1.2.1 使用 2.2.1.2.2 主要功能 2. ...

  7. Jenkins忘记admin密码

    我的解决方法: 1.找到Jenkins的comfig.xml配置文件 可以使用find或者locate来查找. 2.备份原来的配置文件,cp备份. 3.修改配置文件: 因为在comfig.xml中ad ...

  8. BUCK电路和BL8033使用记录

    我开始时用的是MPS的MP1584EN,这个芯片各方面都挺不错的.有次老大让我画个降压电路,看到用的是MP1584就说国外的芯片太贵,让我用上海贝岭的BL8033.BL8033确实很好用,虽然它没有1 ...

  9. Machine Learning 学习笔记 03 最小二乘法、极大似然法、交叉熵

    损失函数. 最小二乘法. 极大似然估计. 复习一下对数. 交叉熵. 信息量. 系统熵的定义. KL散度

  10. Java学习day6

    今天跟着教学视频做了个简易的学生管理系统 在编写完全部代码之后出现了在空白处右键没有run as选项的问题,通过csdn与博客园上的多个帖子介绍,得知是jdk配置不对,正确配置后问题得到解决 明天学习 ...