oauth2-梳理oauth2

This commit is contained in:
khalil
2023-11-13 16:47:14 +08:00
parent 31c19f8175
commit 4d614878bf
5 changed files with 33 additions and 72 deletions

View File

@@ -1,12 +1,8 @@
package com.accompany.oauth2.controller;
import com.accompany.common.constant.AppEnum;
import com.accompany.common.constant.Constant;
import com.accompany.common.device.DeviceInfo;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.*;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.service.SysConfService;
import com.accompany.oauth2.common.BaseController;
import com.accompany.oauth2.config.OAuthConfig;
import com.accompany.oauth2.constant.LoginTypeEnum;
@@ -18,9 +14,6 @@ import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
@@ -38,8 +31,6 @@ import java.util.Map;
@RequestMapping("/acc")
public class AccountController extends BaseController {
@Autowired
private SysConfService sysConfService;
@Autowired
private OAuthConfig oAuthConfig;
@Autowired
@@ -49,30 +40,24 @@ public class AccountController extends BaseController {
@PostMapping("/logout")
@ResponseBody
public ServiceRes<Void> logout(String access_token) {
if (StringUtils.isBlank(access_token)) {
public ServiceRes<Void> logout(@RequestParam("access_token") String token) {
if (StringUtils.isBlank(token)) {
return new ServiceRes<>(OAuthStatus.INVALID_REQUEST);
}
myUserDetailsService.logout(access_token);
myUserDetailsService.logout(token);
return new ServiceRes<>(OAuthStatus.SUCCESS);
}
@RequestMapping("/third/login")
public ResponseEntity<OAuth2AccessToken> login(HttpServletRequest request, String openid, Integer type, DeviceInfo deviceInfo,
AppEnum app) throws Exception {
String unionId = request.getParameter("unionid");
public OAuth2AccessToken login(HttpServletRequest request,
@RequestParam String openid, @RequestParam Integer type,
String unionId, DeviceInfo deviceInfo, AppEnum app) throws Exception {
log.info("/acc/third/login? app {} , type {}, unionId {}", app, type, unionId);
checkAppVersion(deviceInfo);
if (StringUtils.isEmpty(openid) || type == 0) {
throw new RuntimeException("参数异常");
}
String ipAddress= IPUtils.getRealIpAddress(request);
String ipAddress = IPUtils.getRealIpAddress(request);
UserDetails userDetails = myUserDetailsService.loadUserByOpenId(openid, type.byteValue(), deviceInfo, ipAddress, unionId);
myUserDetailsService.login(null, userDetails, LoginTypeEnum.get(type), deviceInfo, ipAddress, openid, unionId,null);
OAuth2AccessToken token = createAccessToken(userDetails);
return getResponse(token);
return createAccessToken(userDetails);
}
private OAuth2AccessToken createAccessToken(UserDetails userDetails) {
@@ -87,18 +72,4 @@ public class AccountController extends BaseController {
return token;
}
private ResponseEntity<OAuth2AccessToken> getResponse(OAuth2AccessToken accessToken) {
HttpHeaders headers = new HttpHeaders();
headers.set("Cache-Control", "no-store");
headers.set("Pragma", "no-cache");
return new ResponseEntity<>(accessToken, headers, HttpStatus.OK);
}
private void checkAppVersion(DeviceInfo deviceInfo) {
String limitAppVersion = sysConfService.getDefaultSysConfValueById(Constant.SysConfId.APP_VERSION_LIMIT, Constant.LOWEST_VERSION_FOR_USE);
if (deviceInfo.getAppVersion() == null || AppVersionUtil.compareVersion(deviceInfo.getAppVersion(), limitAppVersion) < 0) {
throw new ServiceException(BusiStatus.VERSIONTOOOLD);
}
}
}

View File

@@ -1,13 +1,8 @@
package com.accompany.oauth2.controller;
import com.accompany.common.constant.Constant;
import com.accompany.common.device.DeviceInfo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.AppVersionUtil;
import com.accompany.common.utils.IPUtils;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.service.SysConfService;
import com.accompany.oauth2.common.BaseController;
import com.accompany.oauth2.exception.UnsupportedIssueTypeException;
import com.accompany.oauth2.ticket.Ticket;
@@ -17,6 +12,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.oauth2.common.exceptions.InvalidTokenException;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@@ -35,19 +31,17 @@ public class TicketController extends BaseController {
@Autowired
private TicketServices ticketServices;
@Autowired
private SysConfService sysConfService;
@RequestMapping("/ticket")
public Object issueTicket(String issue_type, String access_token, HttpServletRequest request,
HttpServletResponse response, DeviceInfo deviceInfo) {
log.info("oauth/ticket=" + access_token + ".........");
checkAppVersion(deviceInfo);
public Object issueTicket(@RequestParam("issue_type") String type, @RequestParam("access_token") String token,
HttpServletRequest request, HttpServletResponse response,
DeviceInfo deviceInfo) {
log.info("oauth/ticket=" + token + ".........");
try {
if (Ticket.ONCE_TYPE.equals(issue_type) || Ticket.MULTI_TYPE.equals(issue_type)) {
Map<String, Object> ticketsMap = ticketServices.issueTicket(access_token);
if (Ticket.ONCE_TYPE.equals(type) || Ticket.MULTI_TYPE.equals(type)) {
Map<String, Object> ticketsMap = ticketServices.issueTicket(token);
TicketRes ticketRes = new TicketRes();
ticketRes.setIssue_type(issue_type);
ticketRes.setIssue_type(type);
ticketRes.setTickets((List<Ticket>) ticketsMap.get("tickets"));
ticketRes.setAccid((String) ticketsMap.get("accid"));
ticketRes.setNetEaseToken((String) ticketsMap.get("netEaseToken"));
@@ -58,23 +52,17 @@ public class TicketController extends BaseController {
}
throw new UnsupportedIssueTypeException("unsupported ticket issue type");
} catch (InvalidTokenException e) {
log.error("issueTicket InvalidTokenException, issue_type=" + issue_type + ", access_token=" + access_token, e);
log.error("issueTicket InvalidTokenException, issue_type=" + type + ", access_token=" + token, e);
response.setStatus(401);
return e;
} catch (UnsupportedIssueTypeException e1) {
log.error("issueTicket UnsupportedIssueTypeException, issue_type=" + issue_type + ", access_token=" + access_token, e1);
log.error("issueTicket UnsupportedIssueTypeException, issue_type=" + type + ", access_token=" + token, e1);
response.setStatus(400);
return e1;
} catch (Exception ex) {
log.error("issueTicket Exception, issue_type=" + issue_type + ", access_token=" + access_token, ex);
log.error("issueTicket Exception, issue_type=" + type + ", access_token=" + token, ex);
return ex;
}
}
private void checkAppVersion(DeviceInfo deviceInfo) {
String limitAppVersion = sysConfService.getDefaultSysConfValueById(Constant.SysConfId.APP_VERSION_LIMIT, Constant.LOWEST_VERSION_FOR_USE);
if (deviceInfo.getAppVersion() == null || AppVersionUtil.compareVersion(deviceInfo.getAppVersion(), limitAppVersion) < 0) {
throw new ServiceException(BusiStatus.VERSIONTOOOLD);
}
}
}

View File

@@ -42,18 +42,18 @@ public class SecurityInterceptor extends BasicInterceptor {
}
// 检查 IP 是否被封禁
String ip = IPUtils.getRealIpAddress(request);
/*String ip = IPUtils.getRealIpAddress(request);
if (this.jedisService.sismember(RedisKey.global_block_ip.getKey(), ip)){
logger.warn("IP {} 被封禁,不允许访问", ip);
return false;
}
}*/
// 检查设备号是否被封禁
String deviceId = request.getParameter("deviceId");
/*String deviceId = request.getParameter("deviceId");
if (StringUtils.isNotEmpty(deviceId) && this.jedisService.sismember(RedisKey.global_block_device.getKey(), deviceId)){
logger.warn("设备号 {} 被封禁,不允许访问", deviceId);
return false;
}
}*/
// 验证签名
if (this.isLegalRequest(request)) {