springboot uniapp 验证码滑块
java
(图片来源网络,侵删)
private final Map sliderPositions = new HashMap();
@GetMapping("/captcha")
public ResponseEntity getCaptcha() {
try {
// Width of the slider
int sliderWidth = 50;
// Total captcha width
// int imageWidth = 200;
int imageWidth = 300;
// Total captcha height
int imageHeight = 100;
int sliderPosition = ThreadLocalRandom.current().nextInt(10, imageWidth - sliderWidth - 10);
BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = image.createGraphics();
// Background
graphics.setColor(Color.LIGHT_GRAY);
graphics.fillRect(0, 0, imageWidth, imageHeight);
// Slider area
graphics.setColor(Color.RED);
graphics.fillRect(sliderPosition, 0, sliderWidth, imageHeight);
graphics.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
// Store the slider position for validation
String sessionId = "user-session-id"; // This should be unique per user/session
sliderPositions.put(sessionId, sliderPosition);
return ResponseEntity.ok().contentType(MediaType.IMAGE_PNG).body(baos.toByteArray());
} catch (Exception e) {
e.printStackTrace();
return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@PostMapping("/verify")
public ResponseEntity verifyCaptcha(@RequestBody VerifyRequest request) {
String sessionId = "user-session-id"; // This should match the session used in getCaptcha
if (!sliderPositions.containsKey(sessionId)) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Session not found");
}
int correctPosition = sliderPositions.get(sessionId);
if (Math.abs(request.getSlideDistance() - correctPosition)
{
if (res.statusCode === 200) {
uni.showToast({ title: '验证成功', icon: 'success' });
} else {
uni.showToast({ title: '验证失败', icon: 'none' });
}
this.fetchCaptcha(); // 重新加载验证码
},
});
},
},
};
/* .container {
position: relative;
width: 200px;
height: 100px;
margin: 0 auto;
}
.captcha {
width: 100%;
}
.slider {
position: absolute;
top: 0;
width: 50px;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
color: #fff;
text-align: center;
line-height: 100px;
} */
.container {
position: relative;
width: 300px;
height: 100px;
/* margin: 0 auto; */
}
.captcha {
height: 100px;
}
.slider {
position: absolute;
top: 0;
width: 50px;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
color: #fff;
text-align: center;
line-height: 100px;
}
CaptchaPopup.vue
打开
import SliderCaptcha from '@/components/SliderCaptcha.vue';
// import Popup from '@/components/uni-popup/uni-popup.vue'; // 确保路径正确
export default {
components: {
SliderCaptcha
// Popup
},
data() {
return {
show: false,
};
},
};
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
