Spring Boot实践 | 利用Spring Security快速实现权限控制

本文详细介绍了如何在Spring Boot应用中利用Spring Security进行权限控制。从快速入门到使用内存、数据库和自定义签名服务,再到限制请求、强制HTTPS、防止CSRF攻击和实现用户认证功能,全面展示了Spring Security在实际项目中的应用。通过自定义登录页面和启用HTTP Basic认证,实现安全的用户登录和退出流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

开始之前

快速开始

使用内存签名服务

使用数据库签名服务

使用自定义签名服务

限制请求

强制使用HTTPS

防止跨站点伪造请求

用户认证功能


在java web工程中,一般使用Servlet过滤器(Filter)对于请求进行拦截,然后在Filter中通过自己的验证逻辑来决定是否放行请求。基于这一原理,常用的SpringMVC实现了自己的拦截器,同样的,Spring Security也是基于这个原理,在进入到DispatcherServlet前就可以对Spring MVC的请求进行拦截,然后通过一定的验证(一般验证用户是否有某个权限、请求类型、请求方式等),从而决定是否放行某个请求。

开始之前

 1、Spring Security的主要功能就是通过一定的验证,从而决定是否放行某个请求,可以实现用户访问权限控制,HTTP和HTTPS访问控制、CSRF(跨站点请求伪造)访问控制等;

2、Spring Security的拦截会默认先于其它过滤器之前执行;

3、针对Spring Security,角色权限的命名强制都以"ROLE_"开头且全部大写,比如"ROLE_USER","ROLE_ADMIN",

"ROLE_DBA",当然,角色权限可以任意命名,甚至可以定义一个角色权限为"ROLE_HAHA","ROLE_WUDI"。其提供的方法有的会自动给角色权限加上"ROLE_",这时,就不能给角色权限加上"ROLE_",这里需要注意(后面会提供说明)。

快速开始

1、在Spring Boot项目中引入Spring Security的依赖。

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

2、启动注解

官方定义的是:web工程使用@EnableWebSecurity,非web工程可以使用@EnableGlobalAuthentication。而事实上,@EnableWebSecurity已经标注了@EnableGlobalAuthentication(可以点进源码查看)。

所以,只需要在启动类上标注@EnableWebSecurity即可开启Spring Security功能。

3、启动Spring Boot项目

启动Spring Boot项目后,可以在Console里面看到随机生成的秘钥,如下。

20190611155946525.png

随即在浏览器中任意输入一个存在于Spring Boot项目中的url,就会出现一个拦截页面,输入刚刚生成的秘钥即可访问到预期的页面,如下。

20190611160244493.png20190611160344186.png

4、短板

上述过程暴露了一下问题:

-每次启动都会生成不同的秘钥,造成在访问的过程每次都要输入不同的秘钥,如果丢失又要重启,实在是不方便;

-用户只能使用‘user’账号,无法多样化,不适合构建不同的权限;

-不能自定义自己的验证方式和策略;

-验证界面不美观;

-不能定义哪些url需要验证,哪些不需要;

.....................

为了克服只能使用user+自动生成的秘钥引起的弊端,Spring Security提供了使用内存签名服务、数据库签名服务和自定义签名服务。

使用内存签名服务

顾名思义,就是将用户信息存放在内存中(实际项目都是在数据库中)。相对而言,它比较简单,适合于快速搭建测试环境。

1、继承WebSecurityConfigurerAdapter重写拦截配置

里面有三个常用方法供我们重写,如下。

@Configuration
public class RoleConfig extends WebSecurityConfigurerAdapter {

	/**
	 * <p>用来配置用户签名服务,主要是use
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值