Spring Security

Spring Security

SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。

为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

其核心就是一组过滤器链,项目启动后将会自动配置。

最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式。

几个重要的类

  • webSecurityConfiguration : 自定义 security 策略
  • AuthenticationManagerBuilder : 自定义认证策略
  • @EnableWebSecurity : 开启 WebSecurity 模式

测试

1.导入依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

基本框架

java 复制代码
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
    }
}

2.根据权限认证

java 复制代码
@Override
protected void configure(HttpSecurity http) throws Exception {
   //首页所有人可以访问,功能页只有对应有权限的人可以访问呢
    http.authorizeRequests()
            .antMatchers("/").permitAll()
            .antMatchers("/level1/**").hasRole("vip1")
            .antMatchers("/level2/**").hasRole("vip2")
            .antMatchers("/level3/**").hasRole("vip3");

    //没有权限默认到登录页
    http.formLogin();
}
java 复制代码
//认证
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    //jdbcAuthentication(),在数据库中认证
    //inMemoryAuthentication()内存中认证
    //passwordEncoder(new BCryptPasswordEncoder())给密码加密
    auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
            .withUser("admin").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip3");
}

如果注销404了,就是因为它默认防止csrf跨站请求伪造,因为会产生安全问题,我们可以将请求改为post表单提交,或者在spring security中关闭csrf功能;我们试试:在 配置中增加 http.csrf().disable();

复制代码
http.csrf().disable();//关闭csrf功能:跨站请求伪造,默认只能通过post方式提交logout请求
http.logout().logoutSuccessUrl("/");
java 复制代码
//没有权限默认到登录页
http.formLogin().loginProcessingUrl("/login");
//注销
http.logout().logoutSuccessUrl("/login");

动态权限控制

xml 复制代码
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
    <version>3.0.4.RELEASE</version>
</dependency>
html 复制代码
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"
复制代码
sec:authorize="hasRole('vip3')"

/www.thymeleaf.org/thymeleaf-extras-springsecurity5"

复制代码

sec:authorize="hasRole('vip3')"

复制代码
相关推荐
何以解忧,唯有..1 分钟前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
QQ_216962909632 分钟前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
前端 贾公子2 小时前
第09章:上下文与记忆 (2)
java·服务器·前端
2601_962203512 小时前
Java进阶07集合(续)
java·开发语言
郑州光合科技余经理2 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
IT_陈寒2 小时前
Vue的嵌套组件竟然吃掉了我的事件?
前端·人工智能·后端
专注仿真2 小时前
Spring AI 实现智能对话系统项目指南
数据结构·spring·机器学习
roman_日积跬步-终至千里2 小时前
【数据治理(6)】DataOps 不是调度工具,而是让数据产品长期可信的运行机制
java·服务器·网络
落魄大学生之流水线上谋生计3 小时前
LangGraph 基本用法指南
java·windows·python·langchain
2601_962128413 小时前
SpringBoot篇(缓存层)
java·spring boot·缓存