springsecurity OAuth2.0-第5章 springboot整合 spring security自定义登录页面

Spring Security-自定义登录页面和认证过程其他常用配置 虽然Spring Security给我们提供了登录页面,但是对于实际项目中,大多喜欢使用自己的登录页面。所以Spring Security中不仅仅提供了登录页面,还支持用户自定义登录页面。实现过程也比较简单,只需要修改配置类即可。1.编写登录页面别写登录页面,登录页面中的action不编写对应控制器也可以。 2.修改配置类​ 修改配置类中主要是设置哪个页面是登录页面。配置类需要继承WebSecurityConfigurerAdapter,并重写configure方法。​ successForwardUr 阅读详情

目录

一 自定义认证页面 

1.1 说明

1.2 自定义登录页面

1.2 配置视图

1.3 认证页面的配置

 1.4 配置安全登录信息 

 1.5  controller登录信息

 1.6 启动springboot项目


一 自定义认证页面 

1.1 说明

1. 如果用户没有自定义登录页面,spring security 默认会启动自身内部的登录页面,尽管自动生成的登录页面很方便 快速启动和运行,但大多数应用程序都希望定义自己的登录页面。

1.2 自定义登录页面

在新建一个webapp目录,和resouces目录,平级,将login.jsp页面考配到这个页面下:

mylogin.jsp 页面代码:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="utf-8" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
<form action="login" method="post">
    用户名:<input type="text" name="username"><br>
    密&nbsp;&nbsp;&nbsp;码:
    <input type="password" name="password"><br>
    <input type="submit" value="登录">
</form>
</body>
</html>

1.2 配置视图

在application配置视图跳转的位置

1.3 认证页面的配置

在WebConfig.java中配置认证页面地址: 

说明:这里的 setViewName("mylogin"); 指向的是webapp/WEB-INF/view下的mylogin.jsp页面

​
@Configuration//就相当于springmvc.xml文件
public class WebConfig implements WebMvcConfigurer {
    //默认Url根路径跳转到/login,此url为spring security提供
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        System.out.println("webconfig类中的视图器....");
        //这里的setViewName("redirect:/login")跳转spring security跳转自带的登录页面mylogin.jsp页面
      //  registry.addViewController("/").setViewName("redirect:/login");
        registry.addViewController("/").setViewName("redirect:/login-view");
        registry.addViewController("/login-view").setViewName("mylogin");
    }


}

​

 1.4 配置安全登录信息 

 在WebSecurityConfig中配置表登录信息:

1.fromLogin(): 允许表单登录
2.loginPage(): 指定我们自己的登录页;指定的地址会先跳转到webconfig配置的  registry.addViewController("/login-view").setViewName("mylogin");  然后跳转到web-INF下的view下的mylogin.jsp自定义的登录页面
3.loginProcessingUrl():登录页面进行提交,form表单提交的地址
4.successForwardUrl():指定登录成功后的跳转URL
5.formLogin().permitAll() 我们必须允许所有用户访问我们的登录页(例如为验证的用户),这个 formLogin().permitAll() 方法允许 任意用户访问基于表单登录的所有的URL。 

3.代码信息: 

package com.ljf.spt.security.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

/**
 * @author Administrator
 * @version 1.0
 **/
//@EnableWebSecurity
    @Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    //1.定义用户信息服务(查询用户信息)
    @Bean
    public UserDetailsService userDetailsService(){
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withUsername("zhangsan").password("123").authorities("p1").build());
        manager.createUser(User.withUsername("lisi").password("456").authorities("p2").build());
        return manager;
    }

    //2.密码编码器
    @Bean
    public PasswordEncoder passwordEncoder(){
        return NoOpPasswordEncoder.getInstance();
    }

    //3.安全拦截机制(最重要)
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable(); //屏蔽CSRF控制,即spring security不再限制CSRF
        http.authorizeRequests()
                .antMatchers("/user/r1").hasAuthority("p1") //p1角色具有访问/user/r1读取权限
                .antMatchers("/user/r2").hasAuthority("p2")  //p2角色具有访问/user/r2读取权限
                .antMatchers("/user/**").authenticated()//所有/user/**的请求必须认证通过
                .anyRequest().permitAll()//除了/user/**,其它的请求可以不经过认证,就可以访问
                .and()
                .formLogin()//允许表单登录
                .loginPage("/login-view")//指定我们自己的登录页
               .loginProcessingUrl("/login") //设置登录页面,用户名和密码提交的表单请求页面
               .successForwardUrl("/login-success") //自定义登录成功的页面地址,登录成功跳转的地址
  // 我们必须允许所有用户访问我们的登录页(例如为验证的用户),这个 formLogin().permitAll() 方法允许 任意用户访问基于表单登录的所有的URL。
              .permitAll();//
        //


    }
}

 1.5  controller登录信息

1.截图

 2. 代码:

package com.ljf.spt.ss.controller;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName: LoginController
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/08/03 18:59:45 
 * @Version: V1.0
 **/
@RestController
public class LoginController {

    @RequestMapping(value = "/login-success",produces = {"text/plain;charset=UTF-8"})
    public String loginSuccess(){
        return geteUsername()+" 登录成功";
    }

    /**
     * 测试资源1
     * @return
     */
    @GetMapping(value = "/user/r1",produces = {"text/plain;charset=UTF-8"})
    public String r1(){
        return geteUsername()+" 访问资源1";
    }

    /**
     * 测试资源2
     * @return
     */
    @GetMapping(value = "/user/r2",produces = {"text/plain;charset=UTF-8"})
    public String r2(){
        return geteUsername()+" 访问资源2";
    }
    //获取当前用户信息
    private String geteUsername(){
        String username = null;
        //当前认证通过的用户身份
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        //用户身份
        Object principal = authentication.getPrincipal();
        if(principal == null){
            username = "匿名";
        }
        if(principal instanceof UserDetails){
            UserDetails userDetails = (UserDetails) principal;
            username = userDetails.getUsername();
        }else{
            username = principal.toString();
        }
        return username;
    }
}

 1.6 启动springboot项目

地址: http://localhost:8080/spt-security/login-view

 

访问资源r1

访问资源r2:

SpringBoot OAuth2自定义登陆/授权页 SpringBoot+Oauth2自定义登陆页和授权页的两种实现方式。 阅读详情

相关推荐

SpringSecurity OAuth2.0 尚硅谷学习笔记

SpringSecurity和OAuth2.0的基本运用

weixin_47199727的博客 1628

SpringSecurity自定义登录界面

为什么需要自定义登录界面? 答:因为SpringBoot整合SpringSecurity时,只需要一个依赖,无需其他配置,就可以实现认证功能。但是它的认证登录界面是固定那样的,如下图所示,但是我们希望自己搞个好看的登录界面,所以需要自定义登录界面。 第一步:创建springboot项目 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht

weixin_43472934的博客 7536

SpringBoot集成OAuth2身份验证机制

随着互联网技术的飞速发展、应用场景的多样化以及对安全性的需求越来越高,越来越多的人开始关注并实践“OAuth2”(开放授权)协议。在本文中,我将会通过对 Spring Boot 的集成 OAuth2 身份验证机制,来实现身份认证功能的支持。OAuth2 是一种授权框架协议,它为用户资源提供一个安全的访问通道,让用户可以分享他/她的账号信息给第三方应用或者网站,而不用暴露自己的密码等敏感信息。

AI天才研究院 3379

SpringBoot Security 自定义登录页面

secury login

weixin_42555971的博客 3190

基于Spring Security 6的OAuth2 系列之十一 - 授权服务器--前后端分离授权服务器

至此,我们演示了一个前后端分离的授权服务器的。到目前为止,我们关于授权服务器的使用就告一段落,当然还有很多功能没有讲,这个在后面的系列会逐一讲解,下一章我们来看看资源服务器。

代码让AI扣 2412

光伏发电系统模拟及其发电预测开源python工具pvlib

本文介绍光伏发电系统模拟及其发电预测开源python工具pvlib,以及举例介绍获取辐照度方法、光伏发电预测思路。

肖永威的专栏 1万+

springboot和springsecurity整合OAuth2

springboot和springsecurity整合OAuth2

足迹人生的博客 3229

射频功率放大器设计实战:从理论到Layout的全流程解析

本文以一款40W、960MHz LDMOS功率放大器为例,系统解析了从理论分析、仿真设计到版图实现的射频功率放大器设计全流程。内容涵盖AB类放大器选型、核心指标定义、稳定性分析、Load-Pull/源牵引仿真、史密斯圆图匹配、偏置网络设计,以及最终的谐波平衡仿真与版图电磁验证,为工程师提供了一套从理论到实践的完整设计方法论。

weixin_29266007的博客 248

关于使用springboot+security+oauth2.0时遇到的坑

最近项目中要求使用oauth2.0 作为联合登录的认证服务端,由于之前没接触过这块于是摸索着学习并使用springboot+security+oauth2.0搭建认证服务端,从网上找了个demo咱实际改造中还是遇到了一些坑,再次记录下一遍以后查看。 其中参考demo下载地址: https://github.com/topsale/spring-boot-samples/tree/master/sp...

lfplfp1109的博客 4880

基于ThingsBoard+ESP8266的MQTT远程控制实战:从设备接入到仪表盘交互

本文详细介绍了基于开源物联网平台ThingsBoard与ESP8266开发板,通过MQTT协议实现远程控制的完整实战流程。从环境搭建、设备创建、仪表盘设计到核心代码编写与联调,手把手指导完成从云端到硬端的物联网闭环,为智能家居与物联网原型开发提供低成本、高效率的解决方案。

weixin_29192365的博客 330

Windows非分页缓冲池内存泄漏实战:PoolMon与RAMMap高效排查指南

本文详细介绍了Windows系统中非分页缓冲池内存泄漏的实战排查方法。当系统出现卡顿且内存占用异常增长时,通过RAMMap工具快速定位非分页缓冲池异常,并利用PoolMon监控内核内存分配标签,精准锁定泄漏源。文章提供了从确认症状、安装工具到使用findstr命令溯源驱动文件的完整五步排查流程,并总结了常见泄漏标签与解决方案,帮助用户高效解决深层系统内存问题。

weixin_28455801的博客 1008

springsecurity OAuth2.0-第4章: springboot整合 spring security认证与授权

一 spring security DaoAuthenticationProvider和UserDetailsService的职责搞混淆,其实UserDetailsService只负责从特定的地方(通常是数据库)加载用户信息,仅此而已。而DaoAuthenticationProvider的职责更大,它完成完整的认证流程,同时会把UserDetails填充至Authentication。 二 spring boot整合spring security 2.1 工程结构 2.2配置pom文件

健康平安的活着的专栏 856

【TC3xx芯片】TC3xx芯片电源管理系统PMS详解

本文主要介绍了TC3xx芯片的电源管理系统(PMS),重点探讨了供电模式选择、电源监控机制及电源管理模式。文章首先分析了4种供电模式及其硬件配置方式,详细说明了3.3V单电源供电模式的特点;其次阐述了Primary和Secondary两种电源监控机制,包括阈值配置和异常中断处理;最后重点讲解了CPU和系统的电源管理模式,特别对Standby模式及其进入/退出条件进行了详细说明。文章以软件开发视角解析了TC3xx芯片的电源管理功能,为ECU低功耗设计提供了技术参考。

redparrot2008的博客 1524

Spring boot+Security OAuth2 自定义登录和授权页面

在学习了Spring Security oAuth2.0框架的基础知识,以及动手搭建简单的认证服务器和资源服务器的基础上,我们开始实现自定义登陆和授权界面的开发。 在实际的项目开发中,我们需要根据需要自定义oAuth2.0的登陆和授权界面。以下是具体的开发步骤: 第一步:首先需要引入thymeleaf 模板引擎(Spring boot框架推荐使用thymeleaf开发前端界面) &...

崔向阳@李晓的博客 2万+

virtuoso--DFF

27-实验课-std_cell2

qq_61440044的博客 2002

【大模型】DeepSeek 高级提示词技巧使用详解

DeepSeek 高级提示词技巧使用详解

congge 1万+

前后端分离Oauth2.0 - springsecurity + spring-authorization-server —授权码模式

前后端分离的Oauth2.0实践-授权码模式

qjyn1314的博客 1万+

MIKE水动力笔记18_如何将dfsu流场模拟结果的数据导出成txt文件

MIKE的模拟结果dfsu文件的数据是可以导出的,导出格式为xyz,我们也可以将其改后缀改为txt文本格式,其中包含了某一时刻下所有网格坐标点的数据。

晏长街的博客 4404

Spring Security OAuth2.0认证授权

进入移动互联网时代,大家每天都在刷手机,常用的软件有微信、支付宝、头条等,下边拿微信来举例子说明认证相关的基本概念,在初次使用微信前需要注册成为微信用户,然后输入账号和密码即可登录微信,输入账号和密码登录微信的过程就是认证。系统为什么要认证?认证是为了保护系统的隐私数据与资源,用户的身份合法方可访问该系统的资源。认证︰用户认证就是判断一个用户的身份是否合法的过程,用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问,不合法则拒绝访问。

caijigskg的博客 2036

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

使用Maven(IDEA)来初步整合使用 SpringBoot 2 与Spring Security 5

文章目录一、Spring Security简介二、Spring Security的新特性1、OAuth22、Authorization Code Flow3、支持 WebClient 和 OAuth24、WebFlux OAuth2 Log In Supports OIDC5、配置改进6、默认注销页面7、简化 RequestCache 配置三、SpringBoot 2.X和 Spring Secu...

EasyChillの博客 1405

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

8. Spring Security 5.1之 OAuth 2.0 Login

OAuth 2.0 Login实现了用例:“使用Google登录”或“使用GitHub登录”。

极客星云-优快云博客 7394

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring Security OAuth2.0(五)-----OAuth2实现自定义统一认证登录页/自定义授权页/基于mysql存储数据

Spring Security OAuth2.0(五)-----OAuth2实现自定义统一认证登录页/自定义授权页/基于mysql存储数据

qq_42264638的博客 4899

Spring Security基础教程:从入门到实战

无论你选择以何种方式进行身份验证--是使用 Spring Security 提供的机制和提供商,还是与容器或其他非 Spring Security 身份验证机构集成--你都会发现授权服务可以以一致而简单的方式在你的应用程序中使用。在上面的示例中,都是基于配置文件进行用户的配置角色的设置,都是静态的信息,而实际工作中,都是需要从数据库中进行查询的。当环境中引入上面的依赖后,默认情况会对所有的请求都进行拦截,同时启动服务时会输出随机密码,而用户则默认是"user"。推荐订阅精彩专栏 👇🏻 避免错过下次更新。

Yaml4的博客 1725

SpringSecurity实现OAuth2.0 - 基础版授权服务

基于spring security实现简单版的oauth2.0认证服务

xuguofeng2016的博客 911

SpringSecurity-spring security单点登录

SpringSecurity-spring security单点登录

weixin_45226668的博客 1234
上一篇: NIO的channel
下一篇: java中NIO的selector
健康平安的活着
博客等级 码龄13年 4万+粉丝 1527原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值