系列四、Spring Security中的认证 & 授权(前后端不分离)

这篇具有很好参考价值的文章主要介绍了系列四、Spring Security中的认证 & 授权(前后端不分离)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Spring Security中的认证 & 授权(前后端不分离)

1.1、MyWebSecurityConfigurerAdapter

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2024/1/11 21:50
 * @Description:
 */
@Configuration
public class MyWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

    /**
     * 密码加密器
     * @return
     */
    @Bean
    PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }

    /**
     * 配置基于内存的用户
     * @param auth
     * @throws Exception
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("admin")
                .password("123456")
                .roles("admin")

                .and()

                .withUser("root")
                .password("123456")
                .roles("root");
    }

    /**
     * 静态资源过滤
     * @param web
     * @throws Exception
     */
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/js/**", "/css/**","/images/**");
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/helloWorld")
                .permitAll()
                .anyRequest()
                .authenticated()

                .and()

                .formLogin()
                /**
                 * 自定义登录页面,覆盖Spring Security默认的登录页
                 * 仅仅配置loginPage("/login.html")其实对应两个请求,即:
                 *      GET:http://localhost:7001/login.html,用来获取登录页面
                 *      POST:http://localhost:7001/login.html,处理登录请求
                 * 也可以将登录页面和处理登录请求分开配置,如下:
                 */
                .loginPage("/login.html")
                .loginProcessingUrl("/login")
                /**
                 * 登录成功回调:
                 *      defaultSuccessUrl("/login/successGET")
                 *      successForwardUrl("/login/successPOST")
                 */
                .defaultSuccessUrl("/login/successGET")
                /**
                 * 登录失败回调:
                 *      failureUrl("/login/failGET")
                 *      failureForwardUrl("/login/failPOST")
                 */
                .failureForwardUrl("/login/failPOST")

                .and()

                /**
                 * 注销登录配置
                 *     1、默认注销的 URL 是 /logout,是一个 GET 请求,我们可以通过 logoutUrl 方法来修改默认的注销 URL
                 *     2、logoutRequestMatcher 方法不仅可以修改注销 URL,还可以修改请求方式,实际项目中,这个方法和 logoutUrl 任意设置一个即可
                 *          .logoutRequestMatcher(new AntPathRequestMatcher("/logout","POST"))
                 *     3、logoutSuccessUrl 表示注销成功后要跳转的页面
                 *     4、deleteCookies 用来清除 cookie
                 *     5、clearAuthentication 和 invalidateHttpSession 分别表示清除认证信息和使 HttpSession 失效,默认可以不用配置,默认就会清除
                 */
                .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login.html")
                .deleteCookies()
                .clearAuthentication(true)
                .invalidateHttpSession(true)
                .permitAll()

                .and()

                .csrf()
                .disable();
    }

}

1.2、LoginController

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2024/1/11 22:37
 * @Description: 登录成功 & 失败 & 注销登录相关配置
 */
@RequestMapping("/login")
@RestController
public class LoginController {

    @GetMapping("/successGET")
    public R successGET() {
        return R.ok().data("登录成功【GET】");
    }

    @PostMapping("/successPOST")
    public R successPOST() {
        return R.ok().data("登录成功【POST】");
    }

    @GetMapping("/failGET")
    public R failGET() {
        return R.error().data("登录失败【GET】");
    }

    @PostMapping("/failPOST")
    public R failPOST() {
        return R.error().data("登录失败【POST】");
    }

    @GetMapping("/logoutGET")
    public R logoutGET() {
        return R.ok().data("注销成功【GET】");
    }

    @PostMapping("/logoutPOST")
    public R logoutPOST() {
        return R.ok().data("注销成功【POST】");
    }

}

1.3、登录成功回调

1.3.1、概述

        前后端不分离的登录成功回调有两个关键方法,即:defaultSuccessUrl 和 successForwardUrl。那么它们之间的区别是什么呢?       

(1)successForwardUrl 表示不管你是从哪里来的,登录后一律跳转到 successForwardUrl 指定的地址。例如 successForwardUrl 指定的地址为/login/successPOST,你在浏览器地址栏输入http://localhost:7001/helloWorld,结果因为没有登录,会重定向到登录页面,即login.html页面,当你登录成功之后,就会服务端跳转到/login/successPOST;或者你直接就在浏览器输入了登录页面地址,登录成功后也是来到/login/successPOST;
(2)
defaultSuccessUrl 有一个重载的方法,先说一个参数的 defaultSuccessUrl 方法,如果我们在 defaultSuccessUrl 中指定登录成功的跳转页面为/login/successGET,此时分两种情况,如果你是直接在浏览器中输入的登录地址,登录成功后,就直接跳转到/login/successGET,如果你是在浏览器中输入了其他地址,例如 http://localhost:7001/helloWorld,结果因为没有登录,又重定向到登录页面,此时登录成功后,就不会来到/login/successGET ,而是来到 /helloWorld页面; 
(3)
defaultSuccessUrl 还有一个重载的方法,第二个参数如果不设置默认为 false,也就是我们上面的的情况,如果手动设置第二个参数为 true,则 defaultSuccessUrl 的效果和successForwardUrl 一致;

注意事项:

    一般情况下defaultSuccessUrl 和 successForwardUrl只需配置一个即可,根据自己公司实际情况进行选择。

坑:           

   defaultSuccessUrl对应的接口需为GET、successForwardUrl对应的接口需为POST,如上LoginController #successGET和successPOST:

1.4、登录失败回调

1.4.1、概述

        前后端不分离的登录失败回调也有两个关键方法,即:failureForwardUrl 和 failureUrl。那么它们之间的区别是什么呢?       

failureForwardUrl登录失败之后会发生服务端跳转,failureUrl则是在登录失败之后,会发生重定向。

系列四、Spring Security中的认证 & 授权(前后端不分离),Spring Security OAuth2.0系列,Spring Security,OAuth2.0

1.5、注销登录

1.5.1、概述

/**
 * 注销登录配置
 *     1、默认注销的 URL 是 /logout,是一个 GET 请求,我们可以通过 logoutUrl 方法来修改默认的注销 URL
 *     2、logoutRequestMatcher 方法不仅可以修改注销 URL,还可以修改请求方式,实际项目中,这个方法和 logoutUrl 任意设置一个即可
 *          .logoutRequestMatcher(new AntPathRequestMatcher("/logout","POST"))
 *     3、logoutSuccessUrl 表示注销成功后要跳转的页面
 *     4、deleteCookies 用来清除 cookie
 *     5、clearAuthentication 和 invalidateHttpSession 分别表示清除认证信息和使 HttpSession 失效,默认可以不用配置,默认就会清除
 */

1.5.2、配置

如上。 文章来源地址https://www.toymoban.com/news/detail-806393.html

到了这里,关于系列四、Spring Security中的认证 & 授权(前后端不分离)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Security】Spring Security 认证与授权

    在前面的章节中,我们沿用了Spring Security默认的安全机制:仅有一个用户,仅有一种角色。在实际开发中,这自然是无法满足需求的。本章将更加深入地对Spring Security迚行配置,且初步使用授权机制。 3.1 默认数据库模型的认证与授权 3.1.1、资源准备 首先,在controller包下新建

    2024年02月05日
    浏览(46)
  • spring security认证授权流程

    认证和授权是任何安全体系中的两个主要功能,而在现代Web开发中,Spring Security是最受欢迎和广泛使用的安全框架之一。在本篇文章中,我们将全面介绍Spring Security的认证和授权机制,并提供详细的步骤和示例代码。  一、认证(Authentication) 认证的主要目的是验证用户的身

    2024年02月15日
    浏览(34)
  • Spring Security进行登录认证和授权

    用户首次登录提交用户名和密码后spring security 的 UsernamePasswordAuthenticationFilter 把用户名密码封装 Authentication 对象 然后内部调用 ProvideManager 的 authenticate 方法进行认证,然后 ProvideManager 进一步通过内部调用 DaoAuthencationPriovider 的 authenticate 方法进行认证 DaoAuthencationPriovider 通过

    2024年02月11日
    浏览(36)
  • Springboot +spring security,前后端分离时的security处理方案(一)

    在前后端分离这样的开发模式下,前后端的交互都是通过 JSON 来进行数据传递的,无论登录成功还是失败,都不会有服务端跳转或者客户端跳转之类的操作。 也就是说无论登录成功还是失败,服务端都会返回一段登录成功或失败的 JSON 信息给前端,前端收到JSON之后来决定是

    2024年02月07日
    浏览(29)
  • Spring Security 如何实现身份认证和授权?

    Spring Security 是一个开源的安全框架,提供了基于权限的访问控制、身份认证、安全性事件发布等功能。在 Spring Boot 应用中使用 Spring Security 可以非常方便地实现用户身份认证和授权。 Spring Security 实现身份认证的主要方式是使用认证过滤器链,该过滤器链包含多个过滤器,用

    2024年02月06日
    浏览(43)
  • Spring Boot 如何使用 Spring Security 进行认证和授权

    在 Web 应用程序中,认证和授权是非常重要的功能。Spring Security 是一个基于 Spring 框架的强大的安全框架,它提供了完整的认证和授权解决方案,并且可以轻松地集成到 Spring Boot 应用程序中。本文将介绍如何在 Spring Boot 中使用 Spring Security 进行认证和授权,并提供示例代码。

    2024年02月11日
    浏览(32)
  • 后端进阶之路——综述Spring Security认证,授权(一)

    「作者主页」 :雪碧有白泡泡 「个人网站」 :雪碧的个人网站 「推荐专栏」 : ★ java一站式服务 ★ ★ 前端炫酷代码分享 ★ ★ uniapp-从构建到提升 ★ ★ 从0到英雄,vue成神之路 ★ ★ 解决算法,一个专栏就够了 ★ ★ 架构咱们从0说 ★ ★ 数据流通的精妙之道★ ★后端进

    2024年02月14日
    浏览(37)
  • 权限管理详解:认证、授权及Spring Security配置解析

    深入探讨权限管理的重要性与实现方式,包括认证、授权概念,基于角色和资源的访问控制方案,以及Spring Security框架的概述和快速入门指南。

    2023年04月10日
    浏览(33)
  • Springboot前后端不分离

    当前项目前后端都在一起时,避免一个一个controller的写使用配置文件进行映射

    2024年02月12日
    浏览(31)
  • Spring Security—OAuth2 客户端认证和授权

    关于 JWT Bearer 客户端认证的进一步详情,请参考OAuth 2.0客户端认证和授权许可的 JSON Web Token (JWT)简介。 JWT Bearer 客户端认证的默认实现是  NimbusJwtClientAuthenticationParametersConverter ,它是一个  Converter ,通过在  client_assertion  参数中添加签名的JSON Web Token(JWS)来定制令牌请求

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包