五分钟带你玩转SpringSecurity(十)全网最佳方案,解决无跳转地址报错问题

简介: 五分钟带你玩转SpringSecurity(十)全网最佳方案,解决无跳转地址报错问题


前文说当http://192.168.19.277:6001/authentication/loginPage路径登录后没有成功后的转跳地址 所以会报错 以下代码可以解决

解决方案

在登录成功后 前文我们配置CustomAuthenticationSuccessHandler  返回json 这个类调用了onAuthenticationSuccess 那就重写onAuthenticationSuccess方法

@Component("customAuthenticationSuccessHandler")
public class CustomAuthenticationSuccessHandler extends CustomSavedRequestAwareAuthenticationSuccessHandler {
    @Autowired
    Utils utils;
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
        Authentication authentication) throws IOException, ServletException {
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SysUser sysUser = (SysUser)authentication.getPrincipal();
        logger.info("|" + "用户" + sysUser.getUsername() + "于" + sd.format(new Date()) + "通过web端登录系统,ip为"
            + utils.getIpAddr() + "。" + "|" + sd.format(new Date()) + "|" + sysUser.getUsername());
        super.onAuthenticationSuccess(request, response, authentication);
    }
}

重写onAuthenticationSuccess  大致意思就是 在登录成功后获取转跳地址 如果没有 我们指定给他一个固定地址 这里我们指定了百度

public class CustomSavedRequestAwareAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
    protected final Log logger = LogFactory.getLog(this.getClass());
    private RequestCache requestCache = new HttpSessionRequestCache();
    public CustomSavedRequestAwareAuthenticationSuccessHandler() {}
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
        Authentication authentication) throws ServletException, IOException {
        // 获取code码路径 现在有两种判断
        // 1.如果查询缓存有 定向到缓存 也就是数据库配置
        // 2.如果前台已经登录 但是退回导致session丢失 跳转可道云页面
        String targetUrl;
        // 获取缓存
        SavedRequest savedRequest = this.requestCache.getRequest(request, response);
        if (savedRequest == null) {
            // 跳转可道云
            targetUrl = "https://www.baidu.com";
        } else {
            // 跳转缓存
            targetUrl = savedRequest.getRedirectUrl();
        }
        String targetUrlParameter = this.getTargetUrlParameter();
        if (!this.isAlwaysUseDefaultTargetUrl()
            && (targetUrlParameter == null || !StringUtils.hasText(request.getParameter(targetUrlParameter)))) {
            this.clearAuthenticationAttributes(request);
            this.logger.debug("Redirecting to DefaultSavedRequest Url: " + targetUrl);
            this.getRedirectStrategy().sendRedirect(request, response, targetUrl);
        } else {
            this.requestCache.removeRequest(request, response);
            super.onAuthenticationSuccess(request, response, authentication);
        }
    }
    public void setRequestCache(RequestCache requestCache) {
        this.requestCache = requestCache;
    }
}


相关文章
|
6月前
|
移动开发 运维 小程序
【4月开发者日回顾】小程序审核驳回增加页面截图;H5域名白名单的配置将实时生效……
【4月开发者日回顾】小程序审核驳回增加页面截图;H5域名白名单的配置将实时生效……
109 11
|
2月前
|
数据挖掘
Emlog程序屏蔽用户IP拉黑名单插件
Emlog程序屏蔽用户IP拉黑名单插件
38 9
Emlog程序屏蔽用户IP拉黑名单插件
|
3月前
|
敏捷开发 数据可视化 Devops
阿里云云效产品使用合集之如何禁止代码域CODEOWNER有合并请求时发送邮件
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
6月前
|
存储 前端开发 JavaScript
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
88 1
|
6月前
|
XML 存储 Java
百度搜索:蓝易云【springboot增加logback日志记录ip详解】
通过以上步骤,您可以在Spring Boot应用程序中使用Logback记录客户端的IP地址。请根据实际需求和日志记录规则进行适当调整和配置。
105 0
|
小程序 安全 定位技术
微信小程序学习实录4(开发前准备、认证必备资料、公众号关联小程序、小程序发布、开发配置、服务器域名、业务域名、位置接口设置)
微信小程序学习实录4(开发前准备、认证必备资料、公众号关联小程序、小程序发布、开发配置、服务器域名、业务域名、位置接口设置)
335 0
|
小程序 API 定位技术
微信小程序【关于地址信息的接入以及自动选择当前位置】
微信小程序【关于地址信息的接入以及自动选择当前位置】
335 0
|
前端开发 Java 数据安全/隐私保护
基于拦截器实现线上演示站点只能查看不可操作得要求
基于拦截器实现线上演示站点只能查看不可操作得要求
84 0
|
存储 Java 测试技术
基于Springboot外卖系统19:用户地址+默认收货地址
地址簿,指的是移动端消费者用户的地址信息,用户登录成功后可以维护自己的地址信息。
505 0