广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringSecurity注销设置的方法
  • 702
分享到

SpringSecurity注销设置的方法

2024-04-02 19:04:59 702人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

spring Security中也提供了默认的注销配置,在开发时也可以按照自己需求对注销进行个性化定制 开启注销 默认开启 package com.example.config;

spring Security中也提供了默认的注销配置,在开发时也可以按照自己需求对注销进行个性化定制

开启注销 默认开启

package com.example.config;

import com.example.handler.MyAuthenticationFailureHandler;
import com.example.handler.MyAuthenticationSuccesshandler;
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 WebSecurityConfigurer extends WebSecurityConfigurerAdapter {


    @Override
    public void configure(HttpSecurity http) throws Exception {

        //【注意事项】放行资源要放在前面,认证的放在后面
        http.authorizeRequests()
                .mvcMatchers("/index").permitAll() //代表放行index的所有请求
                .mvcMatchers("/loginhtml").permitAll() //放行loginHtml请求
                .anyRequest().authenticated()//代表其他请求需要认证
                .and()
                .fORMLogin()//表示其他需要认证的请求通过表单认证
                //loginPage 一旦你自定义了这个登录页面,那你必须要明确告诉SpringSecurity日后哪个url处理你的登录请求
                .loginPage("/loginHtml")//用来指定自定义登录界面,不使用SpringSecurity默认登录界面  注意:一旦自定义登录页面,必须指定登录url
                //loginProcessingUrl  这个doLogin请求本身是没有的,因为我们只需要明确告诉SpringSecurity,日后只要前端发起的是一个doLogin这样的请求,
                //那SpringSecurity应该把你username和passWord给捕获到
                .loginProcessingUrl("/doLogin")//指定处理登录的请求url
                .usernameParameter("uname") //指定登录界面用户名文本框的name值,如果没有指定,默认属性名必须为username
                .passwordParameter("passwd")//指定登录界面密码密码框的name值,如果没有指定,默认属性名必须为password
//                .successForwardUrl("/index")//认证成功 forward 跳转路径,forward代表服务器内部的跳转之后,地址栏不变 始终在认证成功之后跳转到指定请求
//                .defaultSuccessUrl("/index")//认证成功 之后跳转,重定向 redirect 跳转后,地址会发生改变  根据上一保存请求进行成功跳转
                .successHandler(new MyAuthenticationSuccessHandler()) //认证成功时处理  前后端分离解决方案
//                .failureForwardUrl("/loginHtml")//认证失败之后 forward 跳转
//                .failureUrl("/login.html")//认证失败之后  redirect 跳转
                .failureHandler(new MyAuthenticationFailureHandler())//用来自定义认证失败之后处理  前后端分离解决方案
                .and()
                .loGout()
                .logoutUrl("/logout") //指定注销登录url  默认请求方式必须:GET
                .invalidateHttpSession(true) //会话失效 默认值为true,可不写
                .clearAuthentication(true) //清除认证标记 默认值为true,可不写
                .logoutSuccessUrl("/loginHtml") //注销成功之后跳转页面
                .and()
                .csrf().disable(); //禁止csrf 跨站请求保护
    }
}
  • 通过logout()方法开启注销配置
  • logoutUrl指定退出登录请求地址,默认是GET请求,路径为/logout
  • invalidateHttpSession 退出时是否是session失效,默认值为true
  • clearAuthentication 退出时是否清除认证信息,默认值为true
  • logoutSuccessUrl 退出登录时跳转地址

测试

先访问http://localhost:8080/hello,会自动跳转到http://localhost:8080/loginHtml登录界面,输入用户名和密码,地址栏会变化为:http://localhost:8080/doLogin,然后重新访问http://localhost:8080/hello,此时可以看到hello的数据,表示登录认证成功然后访问http://localhost:8080/logout,会自动跳转到http://localhost:8080/loginHtml登录页面,然后在访问http://localhost:8080/hello,发现会跳转到http://localhost:8080/loginHtml登录界面,表示后端认定你未登录了,需要你登录认证

配置多个注销登录请求

如果项目中也有需要,开发者还可以配置多个注销登录的请求,同时还可以指定请求的方法

新增退出controller

package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class LogoutController {

    @RequestMapping("/logoutHtml")
    public String logout(){
        return "logout";
    }
}

新增退出界面

logout.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org/" lang="en">
<head>
    <meta charset="UTF-8">
    <title>注销</title>
</head>
<body>
    <h1>注销</h1>
    <form th:action="@{/bb}" method="post">
        <input type="submit" value="注销">
    </form>
</body>
</html>

修改配置信息

package com.example.config;

import com.example.handler.MyAuthenticationFailureHandler;
import com.example.handler.MyAuthenticationSuccessHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.security.web.util.matcher.OrRequestMatcher;

@Configuration
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {


    @Override
    public void configure(HttpSecurity http) throws Exception {

        //【注意事项】放行资源要放在前面,认证的放在后面
        http.authorizeRequests()
                .mvcMatchers("/index").permitAll() //代表放行index的所有请求
                .mvcMatchers("/loginHtml").permitAll() //放行loginHtml请求
                .anyRequest().authenticated()//代表其他请求需要认证
                .and()
                .formLogin()//表示其他需要认证的请求通过表单认证
                //loginPage 一旦你自定义了这个登录页面,那你必须要明确告诉SpringSecurity日后哪个url处理你的登录请求
                .loginPage("/loginHtml")//用来指定自定义登录界面,不使用SpringSecurity默认登录界面  注意:一旦自定义登录页面,必须指定登录url
                //loginProcessingUrl  这个doLogin请求本身是没有的,因为我们只需要明确告诉SpringSecurity,日后只要前端发起的是一个doLogin这样的请求,
                //那SpringSecurity应该把你username和password给捕获到
                .loginProcessingUrl("/doLogin")//指定处理登录的请求url
                .usernameParameter("uname") //指定登录界面用户名文本框的name值,如果没有指定,默认属性名必须为username
                .passwordParameter("passwd")//指定登录界面密码密码框的name值,如果没有指定,默认属性名必须为password
//                .successForwardUrl("/index")//认证成功 forward 跳转路径,forward代表服务器内部的跳转之后,地址栏不变 始终在认证成功之后跳转到指定请求
//                .defaultSuccessUrl("/index")//认证成功 之后跳转,重定向 redirect 跳转后,地址会发生改变  根据上一保存请求进行成功跳转
                .successHandler(new MyAuthenticationSuccessHandler()) //认证成功时处理  前后端分离解决方案
//                .failureForwardUrl("/loginHtml")//认证失败之后 forward 跳转
//                .failureUrl("/login.html")//认证失败之后  redirect 跳转
                .failureHandler(new MyAuthenticationFailureHandler())//用来自定义认证失败之后处理  前后端分离解决方案
                .and()
                .logout()
//                .logoutUrl("/logout") //指定注销登录url  默认请求方式必须:GET
                .logoutRequestMatcher(new OrRequestMatcher(
                        new AntPathRequestMatcher("/aa","GET"),
                        new AntPathRequestMatcher("/bb","POST")
                        )
                )
                .invalidateHttpSession(true) //会话失效 默认值为true,可不写
                .clearAuthentication(true) //清除认证标记 默认值为true,可不写
                .logoutSuccessUrl("/loginHtml") //注销成功之后跳转页面
                .and()
                .csrf().disable(); //禁止csrf 跨站请求保护
    }
}

测试

GET /aa 跟上面测试方法一样

POST /bb

先访问http://localhost:8080/hello,会自动跳转到http://localhost:8080/loginHtml登录界面,输入用户名和密码,地址栏会变化为:http://localhost:8080/doLogin,然后重新访问http://localhost:8080/hello,此时可以看到hello的数据,表示登录认证成功然后访问http://localhost:8080/logoutHtml,会跳出注销页面,点击“注销”按钮,会返回到http://localhost:8080/loginHtml登录界面,再重新访问http://localhost:8080/hello,发现会跳转到http://localhost:8080/loginHtml登录界面,表示注销成功,需要重新登录。

前后端分离注销配置

如果是前后端分离开发,注销成功之后就不需要页面跳转了,只需要将注销成功的信息返回前端即可,此时我们可以通过自定义LogoutSuccessHandler实现来返回内容注销之后信息

添加handler

package com.example.handler;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


public class MyLogoutSuccessHandler implements LogoutSuccessHandler {
    @Override
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        Map<String,Object> result = new HashMap<>();
        result.put("msg","注销成功,当前认证对象为:"+authentication);
        result.put("status",200);
        result.put("authentication",authentication);
        response.setContentType("application/JSON;charset=UTF-8");
        String s = new ObjectMapper().writeValueAsString(result);
        response.getWriter().println(s);
    }
}

修改配置信息

logoutSuccessHandler

package com.example.config;

import com.example.handler.MyAuthenticationFailureHandler;
import com.example.handler.MyAuthenticationSuccessHandler;
import com.example.handler.MyLogoutSuccessHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.security.web.util.matcher.OrRequestMatcher;

@Configuration
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {


    @Override
    public void configure(HttpSecurity http) throws Exception {

        //【注意事项】放行资源要放在前面,认证的放在后面
        http.authorizeRequests()
                .mvcMatchers("/index").permitAll() //代表放行index的所有请求
                .mvcMatchers("/loginHtml").permitAll() //放行loginHtml请求
                .anyRequest().authenticated()//代表其他请求需要认证
                .and()
                .formLogin()//表示其他需要认证的请求通过表单认证
                //loginPage 一旦你自定义了这个登录页面,那你必须要明确告诉SpringSecurity日后哪个url处理你的登录请求
                .loginPage("/loginHtml")//用来指定自定义登录界面,不使用SpringSecurity默认登录界面  注意:一旦自定义登录页面,必须指定登录url
                //loginProcessingUrl  这个doLogin请求本身是没有的,因为我们只需要明确告诉SpringSecurity,日后只要前端发起的是一个doLogin这样的请求,
                //那SpringSecurity应该把你username和password给捕获到
                .loginProcessingUrl("/doLogin")//指定处理登录的请求url
                .usernameParameter("uname") //指定登录界面用户名文本框的name值,如果没有指定,默认属性名必须为username
                .passwordParameter("passwd")//指定登录界面密码密码框的name值,如果没有指定,默认属性名必须为password
//                .successForwardUrl("/index")//认证成功 forward 跳转路径,forward代表服务器内部的跳转之后,地址栏不变 始终在认证成功之后跳转到指定请求
//                .defaultSuccessUrl("/index")//认证成功 之后跳转,重定向 redirect 跳转后,地址会发生改变  根据上一保存请求进行成功跳转
                .successHandler(new MyAuthenticationSuccessHandler()) //认证成功时处理  前后端分离解决方案
//                .failureForwardUrl("/loginHtml")//认证失败之后 forward 跳转
//                .failureUrl("/login.html")//认证失败之后  redirect 跳转
                .failureHandler(new MyAuthenticationFailureHandler())//用来自定义认证失败之后处理  前后端分离解决方案
                .and()
                .logout()
//                .logoutUrl("/logout") //指定注销登录url  默认请求方式必须:GET
                .logoutRequestMatcher(new OrRequestMatcher(
                        new AntPathRequestMatcher("/aa","GET"),
                        new AntPathRequestMatcher("/bb","POST")
                        )
                )
                .invalidateHttpSession(true) //会话失效 默认值为true,可不写
                .clearAuthentication(true) //清除认证标记 默认值为true,可不写
//                .logoutSuccessUrl("/loginHtml") //注销成功之后跳转页面
                .logoutSuccessHandler(new MyLogoutSuccessHandler()) //注销成功之后处理  前后端分离解决方案
                .and()
                .csrf().disable(); //禁止csrf 跨站请求保护
    }
}

测试

跟第一个测试方法是一样的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: SpringSecurity注销设置的方法

本文链接: https://www.lsjlt.com/news/166955.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringSecurity注销设置的方法
    Spring Security中也提供了默认的注销配置,在开发时也可以按照自己需求对注销进行个性化定制 开启注销 默认开启 package com.example.config; ...
    99+
    2022-11-13
  • 使用SpringSecurity设置角色和权限的注意点
    目录SpringSecurity设置角色和权限概念使用mock代码在controller中为方法添加权限控制Security角色和权限的概念Security中一些可选的表达式Spri...
    99+
    2022-11-13
  • Win8.1怎么注销电脑?Win8/8.1注销在哪及注销方法介绍
    前不久,为一好友电脑安装了最新的Windows 8.1操作系统,不过最近有好友联系小编,问了这样一个问题:Win8.1注销在哪?为什么在Win8.1开始屏幕的电源选项和设置中电源关机选项中,均找不到注销选项,Win8.1...
    99+
    2023-06-07
    Win8.1 注销 Win8 电脑 方法
  • Linux注销用户的方法介绍
    这篇文章主要介绍“Linux注销用户的方法介绍”,在日常操作中,相信很多人在Linux注销用户的方法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux注销用户的方法介绍”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-13
  • wps批注设置图片的方法
    这篇文章主要介绍了wps批注设置图片的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇wps批注设置图片的方法文章都会有所收获,下面我们一起来看看吧。首先我们选中想要批注的文字,点击“插入” 然后点击下方“批...
    99+
    2023-07-02
  • wps批注设置名字的方法
    这篇文章主要讲解了“wps批注设置名字的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“wps批注设置名字的方法”吧!首先选中想要添加批注的部分。 接着点击顶部的“审阅”按钮。 然后点击下...
    99+
    2023-07-02
  • 一文详解spring注解配置bean的初始化方法和销毁方法
    目录1、配置bean的初始化方法1.1、使用@Bean注解的initMethod属性1.2、使用@PostConstruct注解1.3、实现InitializingBean接口1.4...
    99+
    2023-05-18
    spring注解配置bean spring注解配置bean初始化方法 spring注解配置bean销毁方法 spring注解
  • deepin怎么注销系统?deepin系统注销与切换用户的方法
    deepin系统注销的方法有很多,下面我们将从多个方式来进行注销界面的方法。 一、图形注销 点“电源”。 点”注销“。 二、字符界面注销 字符界面要注销,只需要执行exit命...
    99+
    2022-05-23
    deepin deepin系统注销 切换用户
  • 使用SpringSecurity设置角色和权限的注意事项有哪些
    这篇文章将为大家详细讲解有关使用SpringSecurity设置角色和权限的注意事项有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SpringSecurity设置角色和权限概念在UserDetail...
    99+
    2023-06-29
  • Springsecurity Oauth2如何设置token的过期时间
    1.设置token的过期时间 如果我们是从数据库来读取客户端信息的话 我们只需要在数据库设置token的过期时间 1.1 oauth_client_details表每个列的作...
    99+
    2022-11-12
  • Swagger2不被SpringSecurity框架拦截的配置方法是什么
    本篇内容主要讲解“Swagger2不被SpringSecurity框架拦截的配置方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Swagger2不被SpringSecurity框架拦截的...
    99+
    2023-07-05
  • Win10专注助手如何设置?Win10专注助手设置的方式
    Win10系统软件有一个专注助手可以协助客户在免打扰模式時间内不被各种各样手机软件信息内容提示,那麼要如何去设置专注助手呢?下边就和小编一起来看一下Win10专注助手设置的方式吧。Win10专注助手设置的方式最先按住键盘快捷键“win+i”...
    99+
    2023-07-17
  • Win10系统注销和锁定电脑的几种方法
      win10同样有系统注销、锁定功能。注销不可以替代重新启动,只可以清空当前用户的缓存空间和注册表信息,对部分软件的设置有帮助。在win10如何注销锁定计算机呢?   注销有两种方法,一种是在开始菜单那里点击右键然后再...
    99+
    2023-06-09
    Win10 注销 锁定 方法 电脑 系统
  • springboot动态注入配置与docker设置环境变量的方法
    目录1.springboot动态注入配置信息。 1、设置数据库连接地址url为空打包。2、测试启动。3、注入参数启动。4、自定义注入参数字段。5、注入多个参数。6、常用启动...
    99+
    2023-05-15
    springboot注入docker环境变量 springboot配置动态注入 docker环境变量
  • idea中方法、注释、导入类折叠或是展开的设置方法
    目录idea中方法、注释、导入类折叠或是展开的设置补充:intellij IDEA 如何折叠一个类中的所有代码块(方法、注释等)idea中方法、注释、导入类折叠或是展开的设置 如图圈...
    99+
    2023-05-18
    idea方法折叠展开的设置 idea方法导入类折叠
  • WindowsXP设置开机立即拨号上网(开机、重启、注销)
      WinXP设置开机立即拨号上网,网上有很多相关教程,都是通过拨号连接设置来实现,方法也基本类似。而下面小编所要。   方法如下:   1、先在网络连接-新建拨号快捷方式,命名为adsl,双击登录,选择保存用户名和密...
    99+
    2023-06-13
    开机 拨号 上网 拨号上网 WindowsXP
  • SpringSecurity动态权限的实现方法详解
    目录1. 动态管理权限规则1.1 数据库设计1.2 实战2. 测试最近在做 TienChin 项目,用的是 RuoYi-Vue 脚手架,在这个脚手架中,访问某个接口需要什么权限,这个...
    99+
    2022-11-13
  • goland设置gopath的方法
    goland中设置gopath的方法:1、打开goland工具;2、打开“setting”设置界面;3、点击“GOPATH”;4、在“Project GOPATH”一栏下点击右侧“+”按钮进行添加设置即可。具体操作步骤:打开已安装的gola...
    99+
    2022-10-24
  • centos5.1的vncserver设置方法
    本篇内容介绍了“centos5.1的vncserver设置方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!安装好后,用root用户使用 v...
    99+
    2023-06-10
  • javascript设置select的方法
    本篇内容主要讲解“javascript设置select的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript设置select的方法”吧!javascript设置sel...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作