Java EE-Spring Security配置

Spring Security

基本概念

spring security 的核心功能主要包括:

认证 (你是谁) 授权 (你能干什么) 攻击防护 (防止伪造身份)

其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式。

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>Copy to clipboardErrorCopied

配置

Spring Security 的配置类,通过继承 WebSecurityConfigurerAdapter 类实现,可以重写一下三种方法。

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        //我代表代码
    }
    @Override
    public void configure(HttpSecurity http) throws Exception {
        //我代表代码
    }
    @Override
    public void configure(WebSecurity web) throws Exception {
        //我代表代码
    }
}Copy to clipboardErrorCopied

配置全局信息

AuthenticationManagerBuilder 类用来配置全局的认证相关的信息:

  1. AuthenticationProvider :认证服务提供者
  2. UserDetailsService :认证用户(及其权限)
    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        // 添加后门
        auth.authenticationProvider(backdoorAuthenticationProvider);
        // 自定义AuthenticationProvider实例加入AuthenticationManager
        auth.userDetailsService(backendSysUserDetailsServiceImpl).passwordEncoder(new BCryptPasswordEncoder());
        auth.authenticationProvider(backendSysUserAuthenticationProvider);
    }

权限控制

HttpSecurity 类负责具体的权限控制规则配置。每配置相当于 xml 配置中的一个标签。

各种具体的认证机制的相关配置,OpenIDLoginConfigurer、AnonymousConfigurer、FormLoginConfigurer、HttpBasicConfigurer LogoutConfigurer RequestMatcherConfigurer:spring mvc style、ant style、regex style HeadersConfigurer: CorsConfigurer、CsrfConfigurer SessionManagementConfigurer: PortMapperConfigurer: JeeConfigurer: X509Configurer: RememberMeConfigurer: ExpressionUrlAuthorizationConfigurer: RequestCacheConfigurer: ExceptionHandlingConfigurer: SecurityContextConfigurer: ServletApiConfigurer: ChannelSecurityConfigurer: 此模块的authenticationProvider和userDetailsService; SecurityFilterChain控制。

    @Override
    public void configure(HttpSecurity http) throws Exception {
         http
                .authorizeRequests()
                .antMatchers("/",
                        "/index",
                        "/error"
                ).permitAll()
                .antMatchers("/user/**").hasRole("USER")
                .antMatchers("/admin/**").hasRole("ADMIN")
                .and()
                .formLogin().loginPage("/login").defaultSuccessUrl("/user")
                //TODO 自定义参数名称,与login.html中的参数对应
                .usernameParameter("myusername").passwordParameter("mypassword")
                .and()
                .logout().logoutUrl("/logout").logoutSuccessUrl("/login")
                //鉴权
                .and()
                .authorizeRequests()
                .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {
                    @Override
                    public <O extends FilterSecurityInterceptor> O postProcess(O object) {
                        object.setSecurityMetadataSource(backendSysRoleSecurityMetadataSourceImpl);
                        object.setAccessDecisionManager(backendSysRoleAccessDecisionManagerImpl);
                        return object;
                    }
                });
    }

忽略规则配置

WebSecurity 类负责全局请求忽略规则配置(比如静态文件、注册页面)、全局 HttpFirewall 配置、是否debug配置、全局SecurityFilterChain配置、privilegeEvaluator、expressionHandler、securityInterceptor。


    @Override
    public void configure(WebSecurity web) throws Exception {
         web.ignoring().antMatchers("/css/**", "/js/**");
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/681476.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多模态模型学会打扑克:表现超越GPT-4v,全新强化学习框架是关键

​卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践&#xff0c;基于大语言模型和RAG技术&#xff0c;集合海量工业领域生态资源方优质产品和知识服务&#xff0c;旨在通过智能搜索、连续交互&#xff0c;实时生成个性化的内…

【计算机网络】计算机网络的概念

计算机网络的概念 导读一、计算机网络的概念1.1 个人理解1.2 通信设备与线路1.2.1 集线器1.2.2 交换机1.2.3 路由器 1.3 计算机网络的进一步理解1.4 互联网1.5 网的不同含义 二、计算机网络的不同定义2.1 广义观点2.2 资源共享观点2.3 用户透明性观点 结语 导读 大家好&#x…

JAVA小案例-用循环语句输出1-1000以内能被5整除的数,每5个一行

JAVA小案例-用循环语句输出1-1000以内能被5整除的数&#xff0c;每5个一行 直接看代码&#xff1a; public class Zhengchu {/*** 用循环语句输出1-1000以内能被5整除的数&#xff0c;每5个一行** param args*/public static void main(String[] args) {for (int i 1; i <…

拆分盘投资逻辑与风险探讨

一、引言 随着互联网金融的蓬勃发展&#xff0c;拆分盘作为一种新型投资模式逐渐进入公众视野。它以独特的“只涨不跌”的投资逻辑吸引了众多投资者的关注。本文将对拆分盘的投资逻辑进行解析&#xff0c;并通过一个简单示例进行说明&#xff0c;同时深入探讨其潜在风险&#…

【栈】736. Lisp 语法解析

本文涉及知识点 栈 LeetCode736. Lisp 语法解析 给你一个类似 Lisp 语句的字符串表达式 expression&#xff0c;求出其计算结果。 表达式语法如下所示: 表达式可以为整数&#xff0c;let 表达式&#xff0c;add 表达式&#xff0c;mult 表达式&#xff0c;或赋值的变量。表达…

软件需求分析文档(需求报告实际项目直接套用模板Word及软件全文档)

目录 第1章 序言 第2章 引言 2.1 项目概述 2.1.1 项目背景 2.1.2 项目目标 2.2 编写目的 2.3 文档约定 2.4 预期读者及阅读建议 第3章 技术要求 3.1 软件开发要求 3.1.1 接口要求 3.1.2 系统专有技术 3.1.3 查询功能 3.1.4 数据安全 3.1.5 可靠性要求 3.1.6 稳定…

Java面试题:解决Redis缓存击穿问题

缓存击穿 当一个key过期时,需要对这个key进行数据重建 在重建的时间内如果有大量的并发请求进入,就会绕过缓存进入数据库,会瞬间击垮DB 重建时间可能因为数据是多个表的混合结果需要分头统计而延长,从而更容易出现缓存击穿问题 缓存击穿的解决方案 添加互斥锁 先查询缓存…

随身WiFi十大热门品牌优缺点分析!哪个品牌的随身wifi更值得买?随身wifi推荐测评!

格行随身wifi 【品牌特点】&#xff1a;服务好&#xff0c;性价比高&#xff0c;随身WiFi行业的“海底捞” 【优点】&#xff1a;专注物联网行业15年&#xff0c;产品和服务双驱动&#xff0c;综合实力和客户口碑领先 【缺点】&#xff1a;产品相对聚焦&#xff0c;产品类型…

JVM(Java虚拟机)、JMM(Java内存模型)笔记

面试常见&#xff1a; 请你谈谈你对JVM的理解?java8虚拟机和之前的变化更新?什么是OOM&#xff0c;什么是栈溢出StackOverFlowError? 怎么分析?JVM的常用调优参数有哪些?内存快照如何抓取&#xff1f;怎么分析Dump文件&#xff1f;谈谈JVM中&#xff0c;类加载器你的认识…

家庭海外仓系统:做好标准化管理,小空间也能做出高收益

家庭海外仓凭借其运营模式灵活&#xff0c;合作成本低的独有特点&#xff0c;还是被很多跨境卖家所接受的。不过家庭海外仓的盈利也面临着一些问题。 首先&#xff0c;家庭海外仓的仓储空间有限&#xff0c;很难通过规模效应放大收益。家庭海外仓通常只能存储少量货物&#xf…

[leetcode hot 150]第一百零八题,将有序数组转换为二叉搜索树

题目&#xff1a;给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡二叉搜索树。 给定一个有序的整数数组,我们需要构建一棵平衡的二叉搜索树。平衡二叉树是指任意一个节点的左右子树的高度差不超过1。 由于给定的数组是有序的…

SpringBoot前端URL访问本地磁盘文件

SpringBoot前端通过 URL访问本地磁盘文件&#xff0c;其实就是 SpringBoot访问web中的静态资源的处理方式。 SpringBoot 访问web中的静态资源&#xff1a;https://blog.csdn.net/qq_42402854/article/details/90295079 首先&#xff0c;我们知道浏览器访问本地磁盘文件的方式为…

免费的维吾尔语翻译器:维汉翻译通App,最近新增了什么功能呢?让我们一起来看看!好用的维语翻译工具支持语音评分功能、支持汉语查拼音等等。

“阿拉伯语是知识&#xff0c;波斯语是糖&#xff0c;印度语是盐&#xff0c;而维吾尔语则是艺术。” 这是一句流传在西域的古老谚语&#xff0c;它不仅道出了维吾尔语言的独特魅力&#xff0c;也表达了人们对语言艺术的无限热爱。 而今&#xff0c;我们带着这份热爱&#x…

揭秘2024最新版会声会影旗舰版本功能,下载即享专业编辑

在如今这个数字化时代&#xff0c;视频编辑已经成为了许多人生活中不可或缺的一部分。无论是专业的影视制作人员&#xff0c;还是普通的短视频爱好者&#xff0c;都希望能够找到一款功能强大、操作简便的视频编辑软件。而今天&#xff0c;我要为大家介绍的这款产品——会声会影…

python中return语句的用法

一、了解函数的标准格式 def 函数名(参数1, 参数2, ...&#xff0c;参数n):函数体第一行代码函数体第二行代码函数体第三行代码...return 语句变量 函数名(参数1&#xff0c;参数2&#xff0c;...&#xff0c;参数n) python遇到return语句时&#xff0c;会结束整个函数调用&a…

高效数据处理的前沿:【C++】、【Redis】、【人工智能】与【大数据】的深度整合

目录 1.为什么选择 C 和 Redis&#xff1f; 2.人工智能与大数据的背景 1.大数据的挑战 2.人工智能的需求 3.C 与 Redis 的完美结合 1.安装 Redis 和 Redis C 客户端 2.连接 Redis 并进行数据操作 高级数据操作 列表操作 哈希操作 4.与大数据和人工智能结合 5.实际应…

Jan任意文件读取/下载和上传漏洞

自从ChatGPT横空出世以来&#xff0c;我一直想找一个可以自己训练的AI大模型&#xff0c;然而在使用Jan的过程中&#xff0c;数据包中传递的参数引起了我的兴趣&#xff0c;简单尝试后发现了任意文件读取和任意文件上传漏洞。 简介 Jan是ChatGPT的开源替代品&#xff0c;它在…

八、细化XML语句构建器,完善静态SQL解析

这一节主要是优化XML解析SQL部分&#xff0c;流程大概为&#xff1a; 1.XMLConfigBuilder解析配置文件&#xff0c;先解析数据源信息&#xff0c;然后再解析SQL信息&#xff0c;拿到mapper元素下的地址 2.XMLMapperBuilder对上面拿到的mapper地址进行处理&#xff0c;根据标签…

什么是 LLM 大模型训练,详解 Transformer 结构模型

1.模型/训练/推理知识介绍 深度学习领域所谓的“模型”&#xff0c;是一个复杂的数学公式构成的计算步骤。为了便于理解&#xff0c;我们以一元一次方程为例子解释&#xff1a; y ax b复制代码 该方程意味着给出常数 a、b 后&#xff0c;可以通过给出的 x 求出具体的 y。比…

风机5G智能制造工厂工业物联数字孪生平台,推进制造业数字化转型

风机5G智能制造工厂工业物联数字孪生平台&#xff0c;推进制造业数字化转型。在信息化、智能化的浪潮中&#xff0c;风机5G智能制造工厂工业物联数字孪生平台正以其独特的优势&#xff0c;推动制造业实现数字化转型。数字孪生平台不仅为风机制造业带来了前所未有的机遇&#xf…