核心功能

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. 设置IE的自动导包器

    一丶打开IE设置: 快捷键:Ctrl+Alt+S 二丶将Add unambiguous imports on the fly 选中即可: 三丶设置好后别忘了"OK":

  2. vulnhub靶机Tr0ll:1渗透笔记

    Tr0ll:1渗透笔记 靶场下载地址:https://www.vulnhub.com/entry/tr0ll-1,100/ kali ip:192.168.20.128 靶机和kali位于同一网段 信 ...

  3. Apollo模块文章

    Apollo规划模块 自动驾驶公开课 | Apollo 2.5自动驾驶规划控制 : 这篇资料比较早,但是把EM Planner和Lattice Planner这两种在资料上经常看到的算法的来历和大概原 ...

  4. sublime text3 好用的插件

    sublime text3 推荐插件 Package Controller安装 1.打开sublime text 3,按ctrl+~或者菜单View > Show Console打开命令窗口.2 ...

  5. PAT B1014 福尔摩斯约会

    大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm.大侦探很快就明白了,字条上奇 ...

  6. vue中引入jq

    1.cnpm install jquery2.在webpack.base.conf.js中加入一行代码 const webpack=require("webpack") ----- ...

  7. Spring Boot-使用Spring Initializer快速创建Spring Boot项目

    File->project->Spring Initializer 点击next 点击下一步即可,如果是第一次可能需要下载jar包,如下图 resources文件中的目录结构如上图所示 s ...

  8. Spring配置文件-Bean实例化的三种方式

    1.无参构造方法实例化(详见我的博客) 2.工厂静态方法实例化 创建StaticFactory类 public class StaticFactory { public static UserDao ...

  9. LC-844

    给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true .# 代表退格字符. 注意:如果对空文本输入退格字符,文本继续为空. 示例 1: 输入:s = &qu ...

  10. Windows下安装mysql(非安装包)

    Windows下安装mysql(非安装包) 参考:https://www.cnblogs.com/yunlongaimeng/p/12558638.html 1.下载MYSQL(慢的话可以用迅雷,或其 ...