1.Spring Security简介

Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型。他可以实现强大的web安全控制。对于安全控制,我们仅需引入spring-boot-starter-security模块,进行少量的配置,即可实现强大的安全管理。

WebSecurityConfigurerAdapter:自定义Security策略

AuthenticationManagerBuilder:自定义认证策略

@EnableWebSecurity:开启WebSecurity模式

应用程序的两个主要区域是'认证'和'授权'(或者访问控制)。

'认证'和'授权'主要区域是Spring Security 的两个目标。

认证(Authentication),是建立一个他声明的主体的过程(一个'主体'一般是指用户,设备或一些可以在你的应用程序中执行动作的其他系统)

'授权'(Authorization)指确定一个主体是否允许在你的应用程序执行一个动作的过程。为了抵达需要授权的店,主体的身份已经有认证过程建立。

2.Spring Security使用

(1).创建工程

(2).引入SpringSecurity

<!--security-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-security</artifactId>

</dependency>

(3).导入文件

(4).SpringSecurity配置类

HttpSecurity配置登陆、注销功能

package com.hosystem.security.config;

import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;

import org.springframework.security.config.annotation.web.builders.HttpSecurity;

import org.springframework.security.config.annotation.web.builders.WebSecurity;

import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@EnableWebSecurity

public class MySecurityConfig extends WebSecurityConfigurerAdapter{

//定义授权规则

    @Override

protected void configure(HttpSecurity http) throws Exception {

//        super.configure(http);

        //定制请求的授权规则

        http.authorizeRequests().antMatchers("/").permitAll()

.antMatchers("/level1/**").hasRole("VIP1")

.antMatchers("/level2/**").hasRole("VIP2")

.antMatchers("/level3/**").hasRole("VIP3");

//开启自动配置登录功能

        http.formLogin();

//1. /login到登录页

        //2. 重定向到/login?error表示登录失败

        //3. 更多详细规定

    }

//定义认证规则

    @Override

protected void configure(AuthenticationManagerBuilder auth) throws Exception {

//        super.configure(auth);

        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())

.withUser("tom").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP1","VIP2")

.and()

.withUser("jack").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP2","VIP3")

.and()

.withUser("lucy").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP1","VIP3");

}

}

注:如果出现There is no PasswordEncoder mapped for the id “null”

或者 Encoded password does not look like bcrypt(Bad credentials)基本都是springsecurity版本的问题。只需要使用passwordEncoder(new BCryptPasswordEncoder())替换原来的即可。

#老版本springsecurity

auth.inMemoryAuthentication().withUser("user").password("123456").roles("VIP1");

#新版本springsecurity

auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())

.withUser("tom").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP1","VIP2");

(5).Thymeleaf提供的SpringSecurity标签支持

[1].引入thymeleaf-extras-springsecurity5

<!--springsecurity5-->

<dependency>

<groupId>org.thymeleaf.extras</groupId>

<artifactId>thymeleaf-extras-springsecurity5</artifactId>

</dependency>

[2].sec:authorize使用

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org"

     xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<h1 align="center">欢迎光临武林秘籍管理系统</h1>

<div sec:authorize="!isAuthenticated()">

   <h2 align="center">游客您好,如果想查看武林秘籍 <a th:href="@{/login}">请登录</a></h2>

</div>

<div sec:authorize="isAuthenticated()">

   <h2><span sec:authentication="name"></span>,你好,你的角色有:

      <span sec:authentication="principal.authorities"></span></h2>

   <form th:action="@{/logout}" method="post">

      <input type="submit" value="注销"

9、Spring Boot安全的更多相关文章

  1. 玩转spring boot——快速开始

    开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...

  2. 【微框架】之一:从零开始,轻松搞定SpringCloud微框架系列--开山篇(spring boot 小demo)

    Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...

  3. 玩转spring boot——开篇

    很久没写博客了,而这一转眼就是7年.这段时间并不是我没学习东西,而是园友们的技术提高的非常快,这反而让我不知道该写些什么.我做程序已经有十几年之久了,可以说是彻彻底底的“程序老炮”,至于技术怎么样?我 ...

  4. 玩转spring boot——结合redis

    一.准备工作 下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases 运行redis-server.exe程序 出现黑色窗口 ...

  5. 玩转spring boot——AOP与表单验证

    AOP在大多数的情况下的应用场景是:日志和验证.至于AOP的理论知识我就不做赘述.而AOP的通知类型有好几种,今天的例子我只选一个有代表意义的“环绕通知”来演示. 一.AOP入门 修改“pom.xml ...

  6. 玩转spring boot——结合JPA入门

    参考官方例子:https://spring.io/guides/gs/accessing-data-jpa/ 接着上篇内容 一.小试牛刀 创建maven项目后,修改pom.xml文件 <proj ...

  7. 玩转spring boot——结合JPA事务

    接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  8. 玩转spring boot——结合AngularJs和JDBC

    参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...

  9. 玩转spring boot——结合jQuery和AngularJs

    在上篇的基础上 准备工作: 修改pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  10. 玩转spring boot——MVC应用

    如何快速搭建一个MCV程序? 参照spring官方例子:https://spring.io/guides/gs/serving-web-content/ 一.spring mvc结合thymeleaf ...

随机推荐

  1. c#用于时间日期的类型:DateTime

    https://blog.csdn.net/qq_42675313/article/details/82155446 写的简洁易懂了

  2. 一起学Vue:UI框架(element-ui)

    目标 使用Vue+ElementUI构建一个非常简单CRUD应用程序,以便您更好地了解它的工作方式. 效果页面 比如我们要实现这样列表.新增.编辑三个页面: 列表页面 新增页面 编辑页面 安装elem ...

  3. CF618F Double Knapsack

    题意简化 给定两个大小为 n 的集合A,B,要求在每个集合中选出一个子集,使得两个选出来的子集元素和相等 元素范围在 1~n ,n<=1e5 题目连接 题解 考虑前缀和 令A集合的前缀和为SA, ...

  4. Netty源码解析 -- 服务端启动过程

    本文通过阅读Netty源码,解析Netty服务端启动过程. 源码分析基于Netty 4.1 Netty是一个高性能的网络通信框架,支持NIO,OIO等多种IO模式.通常,我们都是使用NIO模式,该系列 ...

  5. 【5】JMicro其于RSA及AES加密实现安全服务调用

    JMicro是基于Java实现的微服务平台,最近花了两个周未实现服务间安全调用支持. JMicro服务调用分两个部份,分别为内部服务间相互调用和外部客户端通过API网关调用JMicro集群内部服务,前 ...

  6. CopyOnWriteArrayList线程安全分析

    CopyOnWriteArrayList是开发过程中常用的一种并发容器,多用于读多写少的并发场景.但是CopyOnWriteArrayList真的能做到完全的线程安全吗? 答案是并不能. 一.Copy ...

  7. numpy数组运算

    一.四则运算   (以此为例) 1.加法 2.减法 3.乘法 4.除法 5.幂运算 二.比较运算   (以此为例) 1.<   > 2.>=    <= 3.==    != ...

  8. Unbuntu 18.04 LTS 环境下Python安装GDAL组件

    Unbuntu 18.04 LTS 环境下Python安装GDAL组件 // 非必要 sudo add-apt-repository ppa:ubuntugis/ppa sudo apt-get up ...

  9. SLAM笔记

    1.matrix.preTranslate()和matrix.postTranslate()的区别 matrix.preTranslate(matrix_1); matrix.postTranslat ...

  10. 常用简单电脑bai快捷键大全

    Ctrl+C 复制.duCtrl+X 剪切.Ctrl+V粘贴.Ctrl+Z撤销.Ctrl+A全选所有文件.zhiDelete删除.daoShift+Delete避开回收站直接永久删除(不可找回).F3 ...