SpringBoot实现滑块验证码验证登陆校验功能详解

yizhihongxing

下面我将为你详细讲解“SpringBoot实现滑块验证码验证登陆校验功能”的完整攻略。

1. 概述

在本文中,我们将介绍使用SpringBoot来实现滑块验证码验证登陆校验功能的完整攻略。其中,我们使用了阿里云的滑块验证码服务和Spring Security框架来完成。

本文将分为以下几个部分:

  1. 阿里云滑块验证码服务介绍
  2. SpringBoot集成阿里云滑块验证码服务
  3. Spring Security框架集成阿里云滑块验证码服务

2. 阿里云滑块验证码服务介绍

阿里云提供了一种非常优秀的滑块验证码服务。该服务主要用于防止机器人恶意攻击。当用户登录时,需要完成滑块验证码的验证,即滑动图块来让系统验证用户的真实性。如果验证通过,就可以正常登录系统。

阿里云的滑块验证码服务可以通过以下方式接入:

  1. 通过HTTP方式调用接口
  2. 在前端页面引入JavaScript SDK

在本文中,我们将使用第一种方式来接入阿里云的滑块验证码服务。

3. SpringBoot集成阿里云滑块验证码服务

接下来,我们将介绍在SpringBoot中集成阿里云滑块验证码服务的步骤:

3.1 引入依赖

首先,在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.0.3</version>
</dependency>

3.2 配置AK和SK

在SpringBoot的application.properties文件中添加以下配置:

# 阿里云AccessKey ID
spring.cloud.alicloud.access-key=your_access_key
# 阿里云Access Key Secret
spring.cloud.alicloud.secret-key=your_secret_key

3.3 调用接口完成滑块验证码服务

通过调用阿里云的滑块验证码服务接口,我们可以获取到滑块验证码的验证结果。具体步骤如下:

  1. 调用阿里云滑块验证码服务的init接口,获取滑块验证码的Ticket和Sig(签名)。
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "your_access_key", "your_secret_key");
IAcsClient client = new DefaultAcsClient(profile);
try {
     InitNvcRequest request = new InitNvcRequest();
     request.setTicket("");
     request.setHeight(320L);
     request.setScreenWidth(300L);
     request.setSig("");
     request.setScene("nc_login");
     request.setNet("ow");
     request.setSessionId(UUID.randomUUID().toString());
     request.setIp("127.0.0.1");
     InitNvcResponse response = client.getAcsResponse(request);
     String challenge = response.getData().getNvcCode();//获取验证码的challenge
     String nvcSessionId = response.getData().getNvcSessionId();//获取该验证码唯一标志
} catch (ClientException e) {
     throw new RuntimeException("generate nvc security error", e);
}
  1. 将Ticket和Sig(签名)返回给前端页面。
{
    "ticket": "LTafPqzghqo...",
    "sig": "ebZkb9i1e0pvFIBYT..."
}
  1. 在前端页面上展示滑块验证码,让用户滑动图块验证身份。

  2. 前端页面将滑块验证码验证的结果返回给SpringBoot后台,SpringBoot后台将调用阿里云的滑块验证码服务的verify接口来对用户进行验证。

DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "your_access_key", "your_secret_key");
IAcsClient client = new DefaultAcsClient(profile);
try {
     VerifyNvcRequest request = new VerifyNvcRequest();
     request.setTicket(ticket);//前端传的ticket
     request.setSig(sig); //前端传的sig
     request.setSessionId(nvcSessionId);//前端传的challenge
     request.setIp(request.getRemoteIp());
     request.setScene("nc_login");
     VerifyNvcResponse response = client.getAcsResponse(request);
     if("PASS".equalsIgnoreCase(response.getCode())){
          return true;
     }else{
          return false;
     }
} catch (ClientException e) {
     throw new RuntimeException("verify nvc security error", e);
}

以上就是SpringBoot集成阿里云滑块验证码服务的全部步骤。

4. Spring Security框架集成阿里云滑块验证码服务

接下来,我们将介绍如何在Spring Security框架中集成阿里云滑块验证码服务。

4.1 配置登录页面

首先,我们需要在Spring Security的配置文件中配置登录页面。

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/login**").permitAll()
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/login")
            .loginProcessingUrl("/login")
            .defaultSuccessUrl("/")
            .failureUrl("/login?error")
            .and()
        .csrf().disable();
}

登录页面的HTML文件如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login Page</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">
    <meta name="csrf-token" content="{{ csrf_token }}">
    <!-- Bootstrap core CSS -->
    <link href="/static/css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="/static/css/signin.css" rel="stylesheet">
    <script src="https://g.alicdn.com/sd/nch5/index.js?t=202007302102030000/version/nvc.9.6.11.js"></script>
</head>
<body>
<div class="container">

    <form class="form-signin" action="/login" method="POST" id="login-form">
        <h2 class="form-signin-heading">Please sign in</h2>
        <input type="text" class="form-control" placeholder="Email address" name="email" required autofocus>
        <input type="password" class="form-control" placeholder="Password" name="password" required>
        <div id="nc-box-div"></div>
        <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
    </form>

</div> <!-- /container -->
<script type="text/javascript">
    NVC_Opt = {
        w:300,  // 控件宽度
        h:40, // 控件高度
        appkey:'FFFF00000000017A9545', // 应用程序标识
        scene:'register',  // 场景标识
        // 点击验证码的回调函数
        callback:function(data){
            if (data.csessionid) {
                document.getElementsByName("csessionid")[0].value = data.csessionid;
                document.getElementsByName("sig")[0].value = data.sig;
                document.getElementsByName("token")[0].value = data.token;
            }
        }
    };
    //载入验证码组件
    NVC_Client.init(document.getElementById("nc-box-div"),NVC_Opt);
</script>
</body>
</html>

4.2 配置AuthenticationProvider

接下来,我们需要在Spring Security的配置文件中配置AuthenticationProvider,以便对用户进行认证。

@Service
public class CustomAuthenticationProvider implements AuthenticationProvider {

    @Autowired
    private UserRepository userRepository;

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        String email = authentication.getName();
        String password = authentication.getCredentials().toString();
        User user = userRepository.findByEmail(email);
        if (user != null && user.getPassword().equals(password)) {
            return new UsernamePasswordAuthenticationToken(user, password, null);
        } else {
            throw new BadCredentialsException("Invalid email or password");
        }
    }

    @Override
    public boolean supports(Class<?> authentication) {
        return authentication.equals(UsernamePasswordAuthenticationToken.class);
    }

}

4.3 配置WebSecurityConfigurerAdapter

最后,我们需要在Spring Security的配置文件中配置WebSecurityConfigurerAdapter,把我们的AuthenticationProvider加入进来。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomAuthenticationProvider authenticationProvider;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authenticationProvider);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/login**").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .loginProcessingUrl("/login")
                .defaultSuccessUrl("/")
                .failureUrl("/login?error")
                .and()
            .csrf().disable();
    }

}

以上就是Spring Security框架集成阿里云滑块验证码服务的全部步骤。

总结:

本文介绍了使用SpringBoot和Spring Security框架来实现滑块验证码验证登陆校验功能。其中,阿里云的滑块验证码服务为我们提供了非常好的支持,为我们的工作带来了很大的便利。我们可以通过以上详细的步骤来实现滑块验证码验证登陆校验功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot实现滑块验证码验证登陆校验功能详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Element-UI中回显失败问题的完美解决

    当我们在使用 Element-UI 中的级联选择器(Cascader)组件时,有时会遇到回显失败的问题,导致选择的值无法正确显示在界面上。这个问题的解决方式有多种,下面我们来详细介绍一种完美解决方案。 问题现象 在使用 Element-UI 的级联选择器组件时,有时候我们需要在修改页面中回显已经选择过的值。这时候,我们可以使用v-model绑定父子组件的选中…

    Vue 2023年5月28日
    00
  • Vue3中defineEmits、defineProps 不用引入便直接用

    在Vue 3中,通过使用defineEmits 和 defineProps,可以轻松地定义和传递props和events,而不必再引入混入对象或组件上下文中的访问器方法。 首先,让我们看看如何使用defineProps定义组件的props。在Vue 3中,我们可以像这样使用defineProps来定义组件的props: <template> &l…

    Vue 2023年5月27日
    00
  • Vue路由应用详细讲解

    Vue 路由应用详细讲解 Vue.js 是一个流行的前端 JavaScript 框架,它强大并且灵活,可以快速搭建前端应用。在 Vue.js 中,路由是一种实现前端页面切换的技术,通过路由可以实现前端应用的页面跳转。 基本的 Vue.js 路由配置 在 Vue.js 中,我们可以通过 vue-router 模块来实现路由功能。下面是一个基本的路由配置示例: …

    Vue 2023年5月27日
    00
  • Vue使用lodash进行防抖节流的实现

    下面是我对“Vue使用lodash进行防抖节流的实现”的完整攻略。 什么是防抖和节流 在讲解实现方法之前,我们来介绍一下什么是防抖和节流。 防抖指的是在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新开始计时。防抖常用于用户输入的场景中,如搜索框输入查询关键字。 节流指的是在一个时间段内只执行一次回调函数,即达到规定的执行间隔时间后才执行。常用于页…

    Vue 2023年5月29日
    00
  • 一文详解React Redux使用方法

    一文详解React Redux使用方法 前言 React是当前最流行的前端框架之一,Redux则是其中最常用的状态管理工具之一。在使用React进行开发时,借助Redux能够有效地管理组件之间的状态,并使得代码更加清晰、易于维护。 本文将详细讲解React Redux的使用方法,包括如何搭建项目、如何定义Action、Reducer和Store,以及如何编写…

    Vue 2023年5月28日
    00
  • Vue中列表渲染指令v-for的基本用法详解

    Vue 中列表渲染指令 v-for 的基本用法详解 Vue 中的 v-for 指令可以用来遍历数组和对象,将每个元素映射为一个节点,并生成相应的列表。 遍历数组 在 Vue 中,我们可以使用 v-for 指令来遍历数组。 语法: <ul> <li v-for="item in items">{{ item }}&l…

    Vue 2023年5月27日
    00
  • Vue动态实现评分效果

    下面就是 “Vue动态实现评分效果” 的完整攻略。 1. 了解评分组件的实现细节 评分组件是一个很常见的组件,在 Vue 中实现起来也比较简单。我们可以通过 v-for 指令渲染出固定个数的星星图标,然后通过绑定 @click 事件来处理星星的选中状态,进而实现评分效果。具体实现步骤如下: 首先,我们需要定义一个数组 starList 来存储星星的显示状态,…

    Vue 2023年5月27日
    00
  • Vue-cli配置打包文件本地使用的教程图解

    下面我为大家详细讲解“Vue-cli配置打包文件本地使用的教程图解”的完整攻略。 一、前置知识 在介绍如何配置Vue-cli打包文件本地使用前,我们需要先了解以下几个概念: Vue-cli:Vue-cli是Vue.js官方提供的一个脚手架工具,通过Vue-cli快速生成Vue项目目录结构和配置,并支持开箱即用的webpack构建工具。 webpack:web…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部