Spring Security登录认证【前后端分离】

基于SpringSecurity 的登录详解(前后端分离) 前后端分离登录:JWT单点登录 阅读详情

1. 导入依赖

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

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

2. 编写用户认证服务类UserDetailsServiceImpl

用户认证服务类需要复写UserDetailsService中的UserDetails -> loadUserByUsername(String username)方法

@Service
public class UserDetailsServiceImpl implements UserDetailsService {
   
   
    private final MageService service; // 用户信息CRUD服务类

    public UserDetailsServiceImpl(MageService service) {
   
   
        this.service = service;
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
   
   
        Mage usr = service.findByName(username); // 根据username查询用户
        if (usr != null) {
   
   
            return new User(usr.getMageName(), usr.getMagePassword(), AuthorityUtils.NO_AUTHORITIES);
        } else {
   
   
            throw new UsernameNotFoundException("当前用户不存在!");
        }
    }
}

loadUserByUsername(String username) 方法返回的类型是UserDetails,创建UserDetails类需要传3个参数

分别是username,password,Collection<? extends GrantedAuthority> authorities

authorities是用来设置用户权限访问的,这个参数即使表中没有也不能不传,如果需求不需要设置权限,可以传AuthorityUtils.NO_AUTHORITIES,表示没权限设置

3. 编写Spring Security配置类SecurityConfig

1. Spring Security的配置类需要继承WebSecurityConfigurerAdapter

@Configuration // 声明配置类
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
   
   
}

2. 设置安全认证的加密方式,早期的Spring Security不是强制性的

/**
* 设置加密方式
*/
@Bean
PasswordEncoder passwordEncoder() {
   
   
    return new BCryptPasswordEncoder();
}

3. 用户认证方式

/**
* 用户认证
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
   
   
    auth.userDetailsService(userDetailsService);
}

4. 安全认证的拦截和回调

前后端不分离,安全认证要做的事是拦截请求,根据配置的情况,跳转到指定页面

前后端分离,安全认证要做的事是拦截请求,根据配置的情况,返回json格式的提示信息给前端,让前端做跳转,后端就不再需要写跳转的代码了

1. 登录成功后

前后端不分离,使用.successForwardUrl() 或者.defaultSuccessUrl() 实现登录成功后的页面跳转

前后端分离,使用.successHandler()实现登录成功后向前端发送json格式的回馈信息

.formLogin()
    .loginProcessingUrl("/doLogin")
    .permitAll()
    .successHandler(new AuthenticationSuccessHandler() {
   
   
        @Override
        public void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse resp, Authentication authentication) throws IOException
Spring security 实现前后端分离登录拦截器及用户权限控制 目录 前言 一、准备工作 1.1、设计数据库(我的工程目录中的sql文件夹下有sql文件直接导入即可) 二、代码实现 2.1、数据操作 2.2、自定义登录逻辑 2.2.1、创建自定义UserDetailsService 2.2.2、自定义的密码加密类 2.3、自定义登录验证结果、登出结果、无权访问处理器 2.3.1、自定义登录成功处理器 2.3.2、自定义登录失败处理器 2... 阅读详情

相关推荐

SpringSecurity前后端分离的安全管理实现(一)

目录 1.创建工程 2.配置工程 1.基础配置 2.pom.xml配置 3.mybatis配置 4.springboot配置 1.创建工程 勾选以下依赖 点击finish咱们的工程就创建好啦💪💪💪 2.配置工程 1.基础配置 先把不需要的先删掉 =====》 把application.properties改成application.yaml 这里采用yaml的写法 2.pom..........

qq_56263094的博客 1289

Springboot + Spring Security 实现前后端分离登录认证及权限控制

Springboot + Spring Security 实现前后端分离登录认证及权限控制 前言     关于Spring Security的概念部分本文不进行赘述,本文主要针对于对Spring Security以及Springboot有一定了解的小伙伴,帮助大家使用Springboot + Spring Security 实现一个前后端分离登录认证的过程。     文章会一步一步循序渐进的带大家敲一遍代码。最终的代码请看最后。     代码中我用到了插件lombok来生成实体的getter/set

m0_68850571的博客 1万+

Spring boot+Spring security+JWT实现前后端分离登录认证及权限控制

基本上没讲什么底层实现,这篇是使用篇,后续会出SpringSecurity的底层源码讲解,并且如果本帖有问题的有疑问的读者可以在评论区留言,本人会积极处理。您的支持是我最大的动力,本人一直在努力的更新各种框架的使用和框架的源码解读~!先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。httpshttpshttps。...

m0_54849806的博客 6507

实战,spring Boot security+JWT 前后端分离架构认证登录

前言 认证、授权是实战项目中必不可少的部分,而Spring Security则将作为首选安全组件,因此陈某新开了 《Spring Security 进阶》 这个专栏,写一写从单体架构到OAuth2分布式架构的认证授权。 Spring security这里就不再过多介绍了,相信大家都用过,也都恐惧过,相比Shiro而言,Spring Security更加重量级,之前的SSM项目更多企业都是用的Shiro,但是Spring Boot出来之后,整合Spring Security更加方便了,用的企业也就多了。

q1472750149的博客 2592

前后端分离时,后端用spring security做登录的认证和授权需要注意的点

5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。前后端不分离时,为了提高系统的安全性,可能会用到session、cookie、token(这里的token一般都是存在了请求体里)等,但是无论哪一种其实都能被伪造,遭受CSRF攻击。2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;跨站攻击的本质是, 攻击者拿着你的“身份凭证”,冒充你进行的相关攻击行为。

qq_45947664的博客 628

Spring Security 6 + JWT 前后端分离认证实战:从过滤器链到无状态登录

在微服务与前后端分离架构日益普及的今天,接口安全与身份认证成为后端开发的必修课。Spring Security 作为 Java 生态最成熟的安全框架,其基于过滤器链的认证授权机制,为开发者提供了从请求拦截到权限判定的完整解决方案。理解 SecurityFilterChain、AuthenticationManager 与 UserDetailsService 的协作原理,是掌握现代 Web 安全的基础。而 JWT 无状态令牌技术,则通过服务端验签与客户端携带的方式,解决了分布式场景下的会话共享难题,让水平扩

weixin_33391446的博客 231

Spring Security 前后端分离登录,非法请求直接返回 JSON

不过,今天要和小伙伴们聊一聊 Spring Security 中的另外一个问题,那就是在 Spring Security 中未获认证的请求默认会重定向到登录页,但是在前后端分离的登录中,这个默认行为则显得非常不合适,今天我们主要来看看如何实现未获认证的请求直接返回 JSON ,而不是重定向到登录页面。首先我们从这个方法的注释中就可以看出,这个方法是用来决定到底是要重定向还是要 forward,通过 Debug 追踪,我们发现默认情况下 useForward 的值为 false,所以请求走进了重定向。

2501_90249109的博客 981

扩展篇:Spring Security在前后端分离下的JSON交互方案

通过前几篇的文章, Spring Security的认证系列基本介绍完毕,前几篇的系列文章更多的是关注 认证本身,对一些细枝末节没有额外的展开,因此接下来的两篇文章会补充讲解一些额外的知识。 本篇文章主要扩展讲解在前后端分离的架构下,Spring Security该如何处理 JSON 类型的数据交互。 随着技术的发展,分工越来越明细;“让专业的人干专业的事” 是发展的主旋律。回到我们的登录认证上,即无论登录成功还是失败,服务端都返回一段 JSON 给前端,该跳转还是该展示就由前端自己决定;前端的事就让前端.

小奇学编程的博客 694

从零开始java安全权限框架篇(八):spring security+jwt实现前后端分离

一:使用jwt管理 今天,在把之前的一个项目拆分成一个前后端分离的项目时(Vue+springboot),这是session是由前端的Vue去管理,后端只要认证就行了,所以去掉了spring security中的繁琐的session管理认证。实际上spring security中jwt用来做接口认证的。但是经过整合我们可以用它整合redis实现分布式无状态请求管理(这也是一个做单点登录的一个...

qq_35755863的博客 1406

一篇文章带你使用-Spring-Security-完成前后端分离,JSON-进行交互

客户端请求不依赖服务端的信息,多次请求不需要必须访问到同一台服务器 服务端的集群和状态对客户端透明 服务端可以任意的迁移和伸缩(可以方便的进行集群化部署) 减小服务端存储压力 3. 如何实现无状态 无状态登录的流程: 首先客户端发送账户名/密码到服务端进行认证 认证通过后,服务端将用户信息加密并且编码成一个 token,返回给客户端 以后客户端每次发送请求,都需要携带认证的 token 服务端对客户端发送来的 token 进行解密,判断是否有效,并且获取用户登录信息 4. 各自优缺点 (1)使用 s.

m0_65441360的博客 463

Spring Security 6.x 系列【34】认证篇之前后端分离场景下的集成方案

Spring Security提供了开箱即用的默认配置,例如默认的登录、登出页面,但在实际开发中,往往需要进行自定义改造,比如前后端分离场景下,前后端通过JSON来进行数据交互,是否操作成功都需要前端通过状态码判断,所有的页面也都需要前端自己去跳转。

记录知识、锤炼自我 2629

Spring Boot+Spring Security:前后端分离之后端改造分析- 第34篇

前言 使用JWT之后,对于Spring Security有些地方就需要进行调整了,另外对于前端也是需要调整的,因为原本是有状态的,现在变成无状态了,也就不存在cookie和session的交互了,这时候前端的认证就需要进行调整。 一、定义JWTLoginFilter 继承UsernamePasswordAuthenticationFilter JWTLoginFilter:登录的过滤器,主要用于获取用户输入的账号密码,封装成UsernamePasswordAuthenticatio...

悟纤学院 2万+

ENVI新手避坑指南:手把手教你搞定遥感影像的坐标系转换(附ArcGIS对比)

本文详细解析ENVI与ArcGIS在遥感影像坐标系转换中的关键差异与实战技巧,特别针对新手常见问题提供避坑指南。从基础概念到高级操作,涵盖定义投影、UTM转换等核心步骤,并对比两种软件的处理精度与效率,帮助用户高效完成遥感影像处理任务。

weixin_42531925的博客 379

机器学习预测土壤养分:从电导率、pH到随机森林与神经网络的农业实践

在智慧农业与精准农业领域,机器学习已成为处理复杂农业数据、挖掘潜在规律的关键技术。其核心原理在于通过算法从多维数据中自动学习特征与目标变量之间的映射关系,尤其擅长捕捉非线性关联。这项技术的核心价值在于能够将传统上依赖昂贵、耗时实验室分析的问题(如土壤养分检测),转化为基于易获取传感器数据(如电导率、pH值)的快速、低成本预测任务,为农业生产的实时决策与资源优化提供了全新可能。其典型应用场景包括作物生长监测、产量预测以及精准施肥管理等。本文聚焦于利用随机森林和神经网络等回归算法,构建通过土壤物理参数预测氮磷钾

weixin_33693070的博客 666

开关电源拓扑结构选型指南:从Buck到Full-Bridge的实战解析

本文为硬件工程师提供了开关电源拓扑结构的实战选型指南。文章系统解析了从基础的Buck、Boost、Buck-Boost,到隔离型的Flyback、Forward,再到中高功率的半桥、全桥以及高效率的LLC谐振拓扑的适用场景与核心特点。通过对比分析各拓扑的优缺点,并结合输入输出电压、功率等级、成本与效率等关键参数,给出了清晰的选型决策路径,帮助工程师根据具体项目需求选择最合适的电源“骨架”。

weixin_29306261的博客 107

【鼠标在不点击的情况下,直接移动到QT控件上不显示提示信息】

有时明明已经调用了setToolTips方法,鼠标移动到QT控件上仍然不会有提示信息,这时候就需要具体分析下。重点就是标红的这段话,大概意思就是。.h文件中加入鼠标移动事件的定义。.cpp文件中实现该事件。

ZTH_G的博客 2424

Agent 操作系统:未来的 Harness 平台

在大模型技术爆发的当下,自主智能体(Agent)已经成为AI原生应用的核心载体,但当前Agent开发面临着碎片化严重、运维难度高、规模化落地难三大核心痛点,就像1970年代没有通用操作系统的裸机编程时代,开发者需要重复造轮子解决底层基础设施问题。本文将深度解析Agent操作系统(Agent OS)作为AI原生时代的底层基础设施的核心定位,以及下一代Harness平台如何将Agent OS与成熟的DevOps、CI/CD、可观测性、成本管理能力深度融合,成为AI原生应用全生命周期管理的统一平台。

软件工程实践的博客 280

BK3296蓝牙音频SoC深度评测:如何用这颗芯片打造超低功耗TWS耳机?

本文深度评测BK3296蓝牙音频SoC在TWS耳机中的应用,重点解析其22nm工艺带来的超低功耗优势(A2DP模式仅2.8mA)和3×3mm封装设计。通过芯片架构分析、双麦降噪调优及开发套件使用指南,为工程师提供打造高性能TWS耳机的完整解决方案,显著提升续航和音频质量。

rice5的博客 656

Matlab实战:水声信号DEMON谱分析从入门到精通(附完整源码)

本文详细介绍了使用Matlab进行水声信号DEMON谱分析的完整流程,从基础理论到实战应用,涵盖信号预处理、包络提取、频谱分析等关键步骤,并附完整源码。特别针对水声通信中的低信噪比环境,提供了多种优化方案和性能提升技巧,帮助读者快速掌握这一水下目标检测的核心技术。

gamma的博客 296

ABB变频器使用PROFINET IO通信模块时的激活方法

ABB变频器使用PROFINET IO通信模块时的激活方法

Robot_PLC_HMI_Automation 2734

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: JAVA网络编程 -UDP篇(简单实现网络聊天)
Y390d
博客等级 码龄9年 11粉丝 165原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值