首页 > 其他分享 >SpringSecurity successHandler方法使用自定义Handler登录成功,302问题

SpringSecurity successHandler方法使用自定义Handler登录成功,302问题

时间:2023-11-11 19:44:06浏览次数:39  
标签:自定义 302 springframework SpringSecurity org import security servlet javax

一开始我自定义了成功和失败两个Handler,在进行调试的时候发现失败的没有问题,但是登录成功的话走的是某人的重定向而不是我自定义的

protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
            .headers().frameOptions().disable()
            .and()
            .formLogin()
            .usernameParameter("userName")
            .passwordParameter("password")
            .loginPage("/index")
            .loginProcessingUrl("/login")
            .successHandler(loginSuccessHandler)
            .failureHandler(loginFailureHandler)
            .and()
            .authorizeRequests()
            .antMatchers("/index","/login","/welcome").permitAll()
            .anyRequest().authenticated();

}
 
package com.std.www.erp_admin.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.std.www.erp_admin.model.RespBean;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
import org.springframework.stereotype.Component;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
    private static ObjectMapper objectMapper=new ObjectMapper();

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        System.out.println("=====================成功=====================");
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().write(objectMapper.writeValueAsString(RespBean.success("登录成功")));
    }
}

我很是奇怪,为什么成功的就不行呢,通过后台输出发现,根本没有走我自定义的handler,于是我走进源码一探究竟

这是源码里调用的方法


public final T successHandler(AuthenticationSuccessHandler successHandler) {
    this.successHandler = successHandler;
    return this.getSelf();
}

然后我发现问题所在了,我这里继承的类型为SavedRequestAwareAuthenticationSuccessHandler,这是从网上借鉴的,于是我把类型替换了一下

package com.std.www.erp_admin.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.std.www.erp_admin.model.RespBean;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
import org.springframework.stereotype.Component;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
public class LoginSuccessHandler implements AuthenticationSuccessHandler {
    private static ObjectMapper objectMapper=new ObjectMapper();
    
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        System.out.println("=====================成功=====================");
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().write(objectMapper.writeValueAsString(RespBean.success("登录成功")));
    }
}

发现成功跳转,因此顺利解决

标签:自定义,302,springframework,SpringSecurity,org,import,security,servlet,javax
From: https://www.cnblogs.com/liyiyang/p/17826234.html

相关文章

  • 安卓自定义控件快速了解
    自定义控件,自定义视图方式,假设我们写好一个视图,就以这个视图封装起来做成一个组件,这个自定义的控件就想当方便以后相同功能时直接调用这个核心分为三步,第一步编写一个类继一个视图,这个继承的视图比如​RelativeLayout​,除了​RelativeLayout​以外,Android还提供了其他一些常用......
  • SpringSecurity权限控制的学习
    Security权限控制流程 环境数据库数据库采用RBAC结构,大概如下图所示创建的表结构如下所示,用户表,角色表,权限表和两个关联他们的表导入springsecurity依赖坐标和我们需要的各种依赖坐标 <!--   mysql的驱动和mybatisplus依赖-->​    <dependency> ......
  • 如何自定义TAPD缺陷模板?
    一、引言现在不少公司使用TAPD,创建缺陷时,系统默认模板是一片空白。其实缺陷有较为固定的模板,设置好模板,就可以免去每次重复敲一些文字。二、设置模板进入设置的路径:设置--》应用设置--》缺陷--》显示设置--》创建页面模板--》新增创建页面模板进入页面后,根据自己的需要,编......
  • 2023-2024-1 20231302 《计算机基础与程序设计》第七周学习总结
    作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第七周作业这个作业的目标数组与链表、基于数组和基于链表实现数据结构、无序表与有序表、树、图、子程序与参数作业正文https://www.cnblogs......
  • pyqt5-自定义函数优化管理组件
    1、介绍pyqt本身提供了诸多的方法和事件特性,可以操作ui组件。对于单一的项目或者说具有个人风格的开发者来说,在此基础上进行整合可以优化代码。整合,这里特指的是ui组件。可能是ui的显示和初始化,也可能是相关的业务代码。2、测试和总结函数中的ui组件可以调用设置值或获取的......
  • pyqt5-自定义类管理组件
    1、直接定义类,类对象作为XxWindowClass的属性,和self.window并列。将self.window的部分组件赋值给自定义类的属性,完成同步。经测试,此时自定义类的对象中可以读取和操作ui组件。但是无法进行事件设置,设置无效。2、解决方法目前有两个解决方法2.1继续1的做法,自定义类的对象与sel......
  • WPF控件设计艺术1按钮与自定义控件设计总结
    框架.NET6.0编译器:vsCommunity2022基于C#大致框架代码分享纯文本按钮TextOnlyButton资源字典分享<ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">......
  • django中数据库外键可以自定义名称吗
    是的,在Django中,你可以自定义数据库外键的名称。在定义模型时,可以使用`db_constraint`参数来设置外键的约束名称。默认情况下,Django会自动生成外键约束的名称,但你可以通过设置`db_constraint`参数为`False`来禁用自动生成的约束,并且在需要时手动为外键指定名称。以下是一个简单的例......
  • 自定义注解
    1、类注解/***需要动态查询CodeTable数据字典时,在类上配置该注解*/@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceCodeAnnotation{}2、字段注解/***需要动态查询CodeTable数据字典时,在对应str属性上配置该注解......
  • layer.load底部添加自定义文字(文字居中效果)
    varindex=layer.load(2,{shade:[0.3,'#000'],success:function(layero){layero.find('.layui-layer-content').after('<divclass="layer-load">加载中...</div>'); layero.find('.la......