1.自定义认证前端页面

简介: 本文介绍Spring Security前后端整合的实现步骤:前端引入login.html页面,后端定义接口与配置类,通过SecurityConfig设置表单登录、权限认证及跳转逻辑,最后启动项目验证登录流程,实现安全访问控制。

1-前端代码

  • 📎login.html
  • 拷贝上述路径到下述位置,注意没有对应文件夹则需要手动创建

2-后端代码

1.定义接口

这里我们在原来的基础之上,继续追加一个即可,我就简单的添加一下哥哥的地址吧

package com.yzxb.SpringSecurity.web;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("demo")
public class HelloController {
    @GetMapping
    public String helloWorld() {
        return "Hello Spring Security";
    }
    // 这个是新增的
    @RequestMapping("/index")
    public String index(){
        return "油炸小波,欢迎加入IKUN大家庭";
    }
}

2.创建配置类

package com.yzxb.SpringSecurity.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated().and().formLogin()
                .loginPage("/login.html")
                .loginProcessingUrl("/doLogin")
                .defaultSuccessUrl("/demo/index")
                .failureUrl("/login.html")
                .usernameParameter("uname")
                .passwordParameter("passwd")
                .permitAll()
                .and()
            .csrf().disable();
    }
}

这个配置类非常重要,笔者带领大家单独解释一下。

(1)configure是一个链式配置,这里不用链式配置也可以,那就每一个属性设置后再http.重新开始写

(2)authenticated()表示开始权限配置,.anyRequest().authenticated()表示所有请求都需认证才可访问

(3)and()会返回HttpSecurityBuilder对象的一个子类(实际就是HttpSecurity),所以and方法相当于又回到HttpSecurity,重新开启新一轮的配置

(4)formLogin()表示开启表单登录配置,loginPage("")用来配置登录页面地址;loginProcessingUrl("")用来配置登录接口地址;defaultSuccessUrl("")用来表示登陆成功后的跳转地址;failureUrl("")表示登录失败后的跳转地址;usernameParameter、passwordParameter表示登录用户名、密码参数名称;permitAll()表示跟登录相关的接口和页面不做拦截,直接通过。

(5)csrf().disable()表示禁用CSRF防御功能,SpringSecurity自带CSRF机制,这里为了测试方便临时关闭。

3-启动验证

  • 启动工程后访问地址:http://localhost:8080/demo/index
  • 页面自动跳转至我们自己创建的登录页面,用户名:user,密码:参照idea控制台打印

  • 输入用户名、密码后跳转返回我们的接口信息

相关文章
|
4月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
本文详细讲解了Nacos作为配置中心的核心功能与实践应用,涵盖配置管理、热更新、共享配置及优先级规则,并通过搭建Nacos集群实现高可用部署,帮助开发者掌握微服务环境下配置的集中化管理方案。
 Nacos配置中心
|
4月前
|
NoSQL Linux 网络安全
Redis集群部署指南
本章基于CentOS7搭建Redis集群,涵盖单机安装、主从复制、哨兵高可用及分片集群配置,详细演示Redis集群部署与管理全过程。
Redis集群部署指南
|
4月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是微服务架构的综合解决方案,由Spring团队推出,具备约定大于配置、组件丰富、开箱即用等特点。为解决Netflix组件停更问题,阿里推出Spring Cloud Alibaba,集成Nacos、Sentinel、Seata等高性能中间件,成为主流技术栈选择。
|
4月前
|
负载均衡 Java 数据安全/隐私保护
Gateway服务网关
本文介绍了微服务架构中网关的核心作用,包括请求路由、权限控制和限流等功能,重点讲解了Spring Cloud Gateway的使用方法。内容涵盖网关的快速搭建、路由配置、断言与过滤器工厂的应用,并通过实际案例演示了如何实现全局过滤器与跨域问题的解决方案,帮助开发者掌握微服务统一入口的关键技术。
 Gateway服务网关
|
4月前
|
SQL Dubbo Java
线程池:故障梳理总结
本文总结了线程池类故障的常见案例与技术分析,涵盖数据库慢查询、连接池配置不当、超时设置不合理等问题,结合真实故障场景,从现象到本质剖析根源,并提出fast-fail、流控、背压等防护策略,助力开发者提升系统稳定性。
|
4月前
|
安全 Java Spring
2.过滤器链加载原理
本文深入解析Spring Security过滤器加载机制,通过分析DelegatingFilterProxy、FilterChainProxy与SecurityFilterChain源码,揭示十五个安全过滤器如何自动装配并形成过滤链,帮助理解框架底层工作原理,为自定义认证页面奠定基础。
|
4月前
|
自然语言处理 fastjson Java
FastJson:大面积故障规避案例
本文记录了一次由Kotlin语法混淆引发的FastJson反序列化重大故障排查过程。因误将`{}`赋值给Java对象字段,导致FastJson解析时触发Kotlin静态错误标记,进而引发全局反序列化失败。问题根源隐蔽,影响巨大,最终通过深入源码定位解决。揭示了多语言混编下语法差异的风险,以及对第三方框架需保持警惕。
 FastJson:大面积故障规避案例
|
4月前
|
存储 安全 前端开发
1.认识OAuth2.0
OAuth2.0是一种开放授权协议,允许第三方应用在用户授权下访问其资源,而无需获取用户账号密码。相比传统方式更安全,广泛用于第三方登录、服务间资源调用等场景,支持授权码、简化、密码和客户端四种模式,其中授权码模式最安全,适用于Web应用;简化模式适合无后端的前端应用;密码模式需高度信任;客户端模式则用于系统间内部通信。
|
4月前
|
关系型数据库 应用服务中间件 nginx
容器化部署引擎Docker
Docker是一种轻量级容器化技术,通过将应用及其依赖打包成镜像,实现跨环境一致部署。它利用沙箱机制隔离容器,避免依赖冲突,解决了开发、测试、生产环境不一致的问题,具备启动快、资源占用少、易于迁移等优势。
 容器化部署引擎Docker
|
4月前
|
消息中间件 监控 Java
RocketMQ:底层Netty频繁OS OOM
本文详述RocketMQ因Netty多ClassLoader加载多个PooledByteBufAllocator,导致堆外内存超限引发OS OOM的排查过程,揭示底层内存管理机制及解决方案。
 RocketMQ:底层Netty频繁OS OOM