SpringSecurity权限控制

本文介绍了SpringSecurity在SpringBoot项目中的集成与权限控制,包括认证、授权概念,登录页定制,以及记住我功能的实现。通过配置过滤器、HttpSecurity、密码验证和授权规则,展示了如何创建用户并赋予不同角色,以及使用Thymeleaf实现前端界面根据用户角色动态展示内容。
摘要由CSDN通过智能技术生成

初识SpringSecurity

学习思路

  • 了解SpringSecurity是什么。
  • 查看官网简介。
  • 简单快速阅读官方文档。

经过一段时间的学习,我们知道构建一个SpringBoot项目只需要三步:

  • 导入maven依赖。
  • 配置相关文件。
  • 编写测试代码。

安全框架

在Web开发中,安全一直是一个十分重要的环节。它是一种非功能性的需求,但是对于一个系统十分重要,我们一般都会使用一些组件或者框架去实现。
例如防御跨站脚本攻击,用户名密码验证这些功能,安全框架集成了一些类,可以自动帮我们做这些操作。
安全框架还为我们提供了用户授权功能,不同的用户角色可以操作的功能是不一样的,例如管理员可以拥有对数据增删查改的权限,普通用户只能查看一部分数据。
市面上比较知名的安全框架:

  • Shiro,用的十分多,功能十分强大。
  • SpringSecurity,用的也很多,但是功能没Shiro那么强大,但是它可以和Spring无缝结合,十分方便,基本的功能全都有。
    SpringSecurity官方文档位置

什么是SpringSecurity?

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI和AOP功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

在SpringBoot项目中集成SpringSecurity

导入maven依赖。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

SpringSecurity的基本原理如下图所示。
SpringSecurity的基本原理
简单来说,SpringSecurity基本都是通过过滤器来完成配置的身份认证、权限认证以及登出。
SpringSecurity在Servlet的过滤链(FilterChain)中注册了一个过滤器FilterChainProxy,它会把请求代理到SpringSecurity维护的多个过滤链,每个过滤链会匹配一些URL,如果匹配则执行对应的过滤器。过滤链是有顺序的,一个请求只会执行第一条匹配的过滤链。
Spring Security 的配置本质上就是新增、删除、修改过滤器。

Http配置和密码验证

Http相关的配置,主要在HttpSecurity类中,在官方文档中有详细的说明。HttpSecurity
用户密码验证的相关方法如下图所示。
用户密码验证相关方法

认证和授权

先来简单说说认证和授权的区别:

  • 认证(authentication),是验证一个特定操作的过程,这个操作通常情况下就是“登录”,需要操作者提供一些信息,认证提供方通过这些信息判断这个操作的来源确实是真正的操作者。用三个字概括就是“你是谁?”
  • 授权(authorization), 是授予某个用户、功能、节点、终端等一些特点的权限或者策略。从一个完整的权限管理系统包括操作、策略、角色、用户、用户组等。用五个字概括就是“你能干什么?”

编写代码

1、建立SpringBoot项目,导入SpringSecurity依赖。
2、导入前端资源。为了方便测试权限控制创建了三个不同等级的目录,里面分别放入了三个相同的html文件。
导入前端资源
为了实现不同的用户拥有不同的功能,我们的首页设计如下图所示。
首页
3、编写路由Controller。

@Controller
public class RouterController {

    @RequestMapping({"/","/index"})
    public String index(){
        return "index";
    }

    @RequestMapping("/toLogin")
    public String toLogin(){
        return "views/login";
    }

    //通过restful实现复用
    @RequestMapping("/level1/{id}")
    pu
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wunianisme

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值