登录校验之滑块验证码完整实现(vue + springboot)
以下是一个简化的Vue前端和Spring Boot后端的示例代码,展示了如何实现滑块验证码的完整功能。
后端Spring Boot代码 (SlideVerifyController.java):
@RestController
@RequestMapping("/api/verify")
public class SlideVerifyController {
@Autowired
�ean slideVerifyService;
@GetMapping("/get")
public void getCaptcha(HttpServletResponse response, HttpSession session) throws IOException {
Captcha captcha = slideVerifyService.createCaptcha();
session.setAttribute("captcha", captcha.getCode());
ImageIO.write(captcha.getImage(), "jpg", response.getOutputStream());
}
@PostMapping("/verify")
public ResponseEntity<?> verifyCaptcha(@RequestParam("code") String code, @RequestParam("offset") int offset, HttpSession session) {
String expectedCode = (String) session.getAttribute("captcha");
boolean verified = slideVerifyService.verify(expectedCode, offset, code);
return ResponseEntity.ok(Collections.singletonMap("verified", verified));
}
}
前端Vue代码 (SlideVerify.vue):
<template>
<div>
<img :src="captchaSrc" @mousedown="handleMouseDown" @mousemove="handleMouseMove" @mouseup="handleMouseUp" class="captcha-image"/>
<div v-show="showSlider" class="slider-bar" :style="{left: sliderOffset + 'px'}"> </div>
<button @click="submitCaptcha">Submit</button>
</div>
</template>
<script>
export default {
data() {
return {
captchaSrc: '/api/verify/get',
startX: 0,
endX: 0,
showSlider: false,
sliderOffset: 0
};
},
methods: {
handleMouseDown(event) {
this.startX = event.clientX;
this.showSlider = true;
},
handleMouseMove(event) {
if (this.showSlider) {
this.endX = event.clientX;
this.sliderOffset = this.endX - this.startX;
}
},
handleMouseUp() {
if (this.showSlider) {
this.showSlider = false;
const offset = this.sliderOffset;
this.sliderOffset = 0;
this.submitCaptcha(offset);
}
},
submitCaptcha(offset) {
axios.post('/api/veri
评论已关闭