Skip to content

Commit

Permalink
upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
jobmission committed Apr 22, 2024
1 parent fd7e2be commit 873f296
Show file tree
Hide file tree
Showing 834 changed files with 173,049 additions and 131,572 deletions.
19 changes: 11 additions & 8 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version>
<version>3.2.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

Expand All @@ -22,7 +22,8 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>17</java.version>
<org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
<commons-text.version>1.11.0</commons-text.version>
<commons-text.version>1.12.0</commons-text.version>
<tianai-captcha.version>1.4.1</tianai-captcha.version>
</properties>

<dependencies>
Expand Down Expand Up @@ -100,12 +101,6 @@
<version>${org.mapstruct.version}</version>
</dependency>

<dependency>
<groupId>com.revengemission.commons</groupId>
<artifactId>captcha</artifactId>
<version>0.7</version>
</dependency>

<!-- cache -->
<dependency>
<groupId>org.springframework.boot</groupId>
Expand All @@ -116,6 +111,12 @@
<artifactId>caffeine</artifactId>
</dependency>

<dependency>
<groupId>cloud.tianai.captcha</groupId>
<artifactId>tianai-captcha-springboot-starter</artifactId>
<version>${tianai-captcha.version}</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
Expand Down Expand Up @@ -146,6 +147,8 @@
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>js</nonFilteredFileExtension>
<nonFilteredFileExtension>css</nonFilteredFileExtension>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>woff</nonFilteredFileExtension>
<nonFilteredFileExtension>jks</nonFilteredFileExtension>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,163 +1,87 @@
package com.revengemission.sso.oauth2.server.controller;

import com.revengemission.commons.captcha.core.VerificationCodeUtil;
import com.revengemission.sso.oauth2.server.config.CachesEnum;
import com.revengemission.sso.oauth2.server.service.CaptchaService;
import com.revengemission.sso.oauth2.server.service.UserAccountService;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.RandomStringUtils;
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
import cloud.tianai.captcha.common.response.ApiResponse;
import cloud.tianai.captcha.spring.application.ImageCaptchaApplication;
import cloud.tianai.captcha.spring.plugins.secondary.SecondaryVerificationApplication;
import cloud.tianai.captcha.spring.vo.CaptchaResponse;
import cloud.tianai.captcha.spring.vo.ImageCaptchaVO;
import cloud.tianai.captcha.validator.common.model.dto.ImageCaptchaTrack;
import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.Collections;
import java.util.concurrent.ThreadLocalRandom;

@RequestMapping(value = "/captcha")
@Controller
public class CaptchaController {

private Logger log = LoggerFactory.getLogger(this.getClass());

private CaptchaService captchaService;

private UserAccountService userAccountService;

@Autowired
public CaptchaController(CaptchaService captchaService, UserAccountService userAccountService) {
this.captchaService = captchaService;
this.userAccountService = userAccountService;
}

/**
* 图形验证码
*/
@ResponseBody
@RequestMapping(value = "/captcha/graph")
public Map<String, Object> captchaGraph() {

Map<String, Object> resultMap = new HashMap<>(16);

String uuid = UUID.randomUUID().toString();
String captcha = VerificationCodeUtil.generateVerificationCode(4, null);
private ImageCaptchaApplication imageCaptchaApplication;

resultMap.put("status", 1);
resultMap.put("ttl", CachesEnum.GraphCaptchaCache.getTtl());
resultMap.put("graphId", uuid);
resultMap.put("graphUrl", "/captcha/graph/print?graphId=" + uuid);

captchaService.saveCaptcha(CachesEnum.GraphCaptchaCache, uuid, captcha);

log.debug("captcha=" + captcha);
return resultMap;

}

/**
* 短信证码
*
* @param phone 手机号
* @param graphId 图形验证码id
*/
@RequestMapping("/gen")
@ResponseBody
@RequestMapping(value = "/captcha/sms")
public Map<String, Object> captchaSms(@RequestParam(value = "signType", required = false, defaultValue = "signIn") String signType,
@RequestParam(value = "phone") String phone,
@RequestParam(value = "captcha") String inputCaptcha, @RequestParam(value = "graphId") String graphId) {
Map<String, Object> resultMap = new HashMap<>(16);

String captcha = captchaService.getCaptcha(CachesEnum.GraphCaptchaCache, graphId);

if (StringUtils.equalsIgnoreCase(inputCaptcha, captcha)) {

if (StringUtils.equalsIgnoreCase(signType, "signIn") && !userAccountService.existsByUsername(phone)) {
resultMap.put("status", 0);
resultMap.put("message", "账号不存在");
return resultMap;
public CaptchaResponse<ImageCaptchaVO> genCaptcha(HttpServletRequest request, @RequestParam(value = "type", required = false) String type) {
if (StringUtils.isBlank(type)) {
type = CaptchaTypeConstant.SLIDER;
}
if ("RANDOM".equals(type)) {
int i = ThreadLocalRandom.current().nextInt(0, 4);
if (i == 0) {
type = CaptchaTypeConstant.SLIDER;
} else if (i == 1) {
type = CaptchaTypeConstant.CONCAT;
} else if (i == 2) {
type = CaptchaTypeConstant.ROTATE;
} else {
type = CaptchaTypeConstant.WORD_IMAGE_CLICK;
}

String uuid = UUID.randomUUID().toString();
String smsCaptcha = RandomStringUtils.randomNumeric(4);

captchaService.saveCaptcha(CachesEnum.SmsCaptchaCache, uuid, phone + "_" + smsCaptcha);

log.info("smsCaptcha=" + smsCaptcha);
// TODO send sms smsCaptcha

resultMap.put("status", 1);
resultMap.put("smsId", uuid);
resultMap.put("ttl", CachesEnum.SmsCaptchaCache.getTtl());
captchaService.removeCaptcha(CachesEnum.GraphCaptchaCache, graphId);
} else {
resultMap.put("status", 0);
resultMap.put("message", "验证码错误!");
}

return resultMap;
CaptchaResponse<ImageCaptchaVO> response = imageCaptchaApplication.generateCaptcha(type);
return response;
}

/**
* 图形验证码打印
*
* @param graphId 验证码编号
* @param width 图片宽度
* @param height 图片高度
*/
@RequestMapping(value = "/captcha/graph/print")
public void captchaGraphPrint(HttpServletResponse response,
@RequestParam(value = "graphId") String graphId,
@RequestParam(value = "w", defaultValue = "150") int width,
@RequestParam(value = "h", defaultValue = "38") int height) throws IOException {

String captcha = captchaService.getCaptcha(CachesEnum.GraphCaptchaCache, graphId);
if (StringUtils.isBlank(captcha)) {
captcha = "0000";
@PostMapping("/check")
@ResponseBody
public ApiResponse<?> checkCaptcha(@RequestBody Data data,
HttpServletRequest request) {
ApiResponse<?> response = imageCaptchaApplication.matching(data.getId(), data.getData());
if (response.isSuccess()) {
return ApiResponse.ofSuccess(Collections.singletonMap("id", data.getId()));
}
response.setContentType("image/png");
response.setHeader("Cache-Control", "no-cache, no-store");
response.setHeader("Pragma", "no-cache");
long time = System.currentTimeMillis();
response.setDateHeader("Last-Modified", time);
response.setDateHeader("Date", time);
response.setDateHeader("Expires", time);
ServletOutputStream stream = response.getOutputStream();
VerificationCodeUtil.outputImage(width, height, stream, captcha);
stream.flush();
stream.close();
return response;
}

@lombok.Data
public static class Data {
private String id;
private ImageCaptchaTrack data;
}

/**
* 图形验证码Base64
* 二次验证,一般用于机器内部调用,这里为了方便测试
*
* @param graphId 验证码编号
* @param width 图片宽度
* @param height 图片高度
* @param id id
* @return boolean
*/
@GetMapping("/check2")
@ResponseBody
@RequestMapping(value = "/captcha/graph/base64")
public Map<String, Object> captchaGraphBase64(@RequestParam(value = "graphId") String graphId, @RequestParam(value = "w", defaultValue = "150") int width,
@RequestParam(value = "h", defaultValue = "38") int height) throws IOException {

Map<String, Object> resultMap = new HashMap<>(16);
String captcha = captchaService.getCaptcha(CachesEnum.GraphCaptchaCache, graphId);
if (captcha != null) {
String base64EncodedGraph = VerificationCodeUtil.outputImage(width, height, captcha);
resultMap.put("status", 1);
resultMap.put("base64EncodedGraph", base64EncodedGraph);
} else {
resultMap.put("status", 0);
resultMap.put("message", "验证码编号无效!");
public boolean check2Captcha(@RequestParam("id") String id) {
// 如果开启了二次验证
if (imageCaptchaApplication instanceof SecondaryVerificationApplication) {
return ((SecondaryVerificationApplication) imageCaptchaApplication).secondaryVerification(id);
}
return resultMap;

return false;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,13 @@ public String master() {

@GetMapping(value = "/list")
@ResponseBody
public JsonObjects<OauthClient> listObjects(@RequestParam(value = "searchValue", required = false, defaultValue = "") String searchValue,
@RequestParam(value = "draw", defaultValue = "0") int draw,
@RequestParam(value = "length", defaultValue = "10") Integer pageSize,
@RequestParam(value = "start", defaultValue = "0") Integer start,
@RequestParam(value = "sortField", required = false, defaultValue = "id") String sortField,
@RequestParam(value = "sortOrder", required = false, defaultValue = "desc") String sortOrder) {
int pageNum = start / 10 + 1;
JsonObjects<OauthClient> result = oauthClientService.list(pageNum, pageSize, sortField, sortOrder);
result.setDraw(draw + 1);
return result;
public JsonObjects<OauthClient> listObjects(@RequestParam(value = "search", required = false) String searchValue,
@RequestParam(value = "offset", defaultValue = "0") int offset,
@RequestParam(value = "limit", defaultValue = "20") int limit,
@RequestParam(value = "sortField", defaultValue = "id") String sortField,
@RequestParam(value = "sortOrder", defaultValue = "desc") String sortOrder) {
int pageNum = offset / limit + 1;
return oauthClientService.list(pageNum, limit, sortField, sortOrder);
}

@GetMapping(value = "/details")
Expand Down Expand Up @@ -91,6 +88,7 @@ public ResponseResult<Object> handlePost(@RequestParam(value = "id", required =
object.setRemarks(remarks);
}
oauthClientService.updateById(object);
responseResult.setStatus(GlobalConstant.SUCCESS);
} else {
if (StringUtils.isAnyEmpty(clientId, clientSecret, authorities, scope, authorizedGrantTypes, webServerRedirectUri)) {
responseResult.setStatus(GlobalConstant.ERROR);
Expand All @@ -104,6 +102,7 @@ public ResponseResult<Object> handlePost(@RequestParam(value = "id", required =
object.setWebServerRedirectUri(webServerRedirectUri);
object.setRemarks(remarks);
oauthClientService.create(object);
responseResult.setStatus(GlobalConstant.SUCCESS);
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,13 @@ public String master() {

@GetMapping(value = "/list")
@ResponseBody
public JsonObjects<UserAccount> listObjects(@RequestParam(value = "searchValue", required = false, defaultValue = "") String searchValue,
@RequestParam(value = "draw", defaultValue = "0") int draw,
@RequestParam(value = "length", defaultValue = "10") Integer pageSize,
@RequestParam(value = "start", defaultValue = "0") Integer start,
@RequestParam(value = "sortField", required = false, defaultValue = "id") String sortField,
@RequestParam(value = "sortOrder", required = false, defaultValue = "desc") String sortOrder) {
int pageNum = start / 10 + 1;
JsonObjects<UserAccount> result = userAccountService.listByUsername(searchValue, pageNum, pageSize, sortField, sortOrder);
result.setDraw(draw + 1);
return result;
public JsonObjects<UserAccount> listObjects(@RequestParam(value = "search", required = false) String searchValue,
@RequestParam(value = "offset", defaultValue = "0") int offset,
@RequestParam(value = "limit", defaultValue = "20") int limit,
@RequestParam(value = "sortField", defaultValue = "id") String sortField,
@RequestParam(value = "sortOrder", defaultValue = "desc") String sortOrder) {
int pageNum = offset / limit + 1;
return userAccountService.listByUsername(searchValue, pageNum, limit, sortField, sortOrder);
}

@GetMapping(value = "/details")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,43 +9,34 @@ public class JsonObjects<T> implements Serializable {
*
*/
private static final long serialVersionUID = 5382742283722856873L;
private List<T> data;
private int draw;
private long recordsFiltered;
private long recordsTotal;

public List<T> getData() {
if (data == null) {
data = new ArrayList<>();
}
return data;
}
private List<T> rows;
private long total;
private long pages;

public void setData(List<T> data) {
this.data = data;
}

public int getDraw() {
return draw;
public List<T> getRows() {
if (rows == null) {
rows = new ArrayList<>();
}
return rows;
}

public void setDraw(int draw) {
this.draw = draw;
public void setRows(List<T> rows) {
this.rows = rows;
}

public long getRecordsFiltered() {
return recordsFiltered;
public long getTotal() {
return total;
}

public void setRecordsFiltered(long recordsFiltered) {
this.recordsFiltered = recordsFiltered;
public void setTotal(long total) {
this.total = total;
}

public long getRecordsTotal() {
return recordsTotal;
public long getPages() {
return pages;
}

public void setRecordsTotal(long recordsTotal) {
this.recordsTotal = recordsTotal;
public void setPages(long pages) {
this.pages = pages;
}
}
Loading

0 comments on commit 873f296

Please sign in to comment.