feat:模块名称调整

This commit is contained in:
曾文豪
2023-01-11 11:21:01 +08:00
parent 61a4a6494a
commit c721e4877f
125 changed files with 56 additions and 56 deletions

View File

@@ -0,0 +1,16 @@
package com.tiesheng.login;
import com.tiesheng.platform.PlatformAutoConfigurer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
/**
* @author hao
*/
@ComponentScan({
"com.tiesheng.login.**.*",
})
@Import(PlatformAutoConfigurer.class)
public class LoginAutoConfigurer {
}

View File

@@ -0,0 +1,63 @@
package com.tiesheng.login.config.token;
import com.tiesheng.annotation.token.TokenIgnore;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
* @author hao
* @ProjectName CmccSpring
* @Copyright Hangzhou ShuoChuang Technology Co.,Ltd All Right Reserved
* @Description 这里是对文件的描述
* @data 2019-07-15
* @note 这里写文件的详细功能和改动
* @note
*/
@Aspect
@Component
public class TsTokenAspect {
@Autowired
TsTokenConfig tsTokenConfig;
/**
* 切入点
*/
@Pointcut("execution(* com..controller..*.*(..))")
public void methodArgs() {
}
/**
* 获取操作日志说明
*
* @param joinPoint
*/
@Before("methodArgs()")
public void before(JoinPoint joinPoint) {
// 过滤不要需要验证的接口
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
TokenIgnore apiTokenIgnore = method.getAnnotation(TokenIgnore.class);
if (apiTokenIgnore != null) {
return;
}
// token验证
tsTokenConfig.validToken(true);
}
}

View File

@@ -0,0 +1,133 @@
package com.tiesheng.login.config.token;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.jwt.JWT;
import com.tiesheng.login.config.token.bean.TokenBean;
import com.tiesheng.util.ServletKit;
import com.tiesheng.util.exception.ApiException;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.Map;
/**
* @author hao
*/
@Configuration
@ConfigurationProperties("tiesheng.token")
public class TsTokenConfig {
private Map<String, TokenBean> ignores = MapUtil.newHashMap();
private String encryptKey = "%kIp9frQCu";
private Integer expireHours = 48;
/**
* 获取当前登录的token
*
* @return
*/
public static TokenBean get() {
TsTokenConfig tokenConfig = SpringUtil.getBean(TsTokenConfig.class);
return tokenConfig.validToken(true);
}
/**
* 获取当前登录的token
*
* @return
*/
public static TokenBean getWithoutThr() {
TsTokenConfig tokenConfig = SpringUtil.getBean(TsTokenConfig.class);
return tokenConfig.validToken(false);
}
/**
* 验证token
*
* @param token
* @return
*/
public TokenBean isIgnored(String token) {
if (ignores == null) {
return null;
}
return ignores.get(token);
}
/**
* 验证token
*
* @return
*/
public TokenBean validToken(boolean thrExp) {
String token = ServletUtil.getHeader(ServletKit.getRequest(), "token", "utf-8");
TokenBean tokenBean = isIgnored(token);
if (tokenBean != null) {
return tokenBean;
}
try {
JWT decode = JWT.of(token);
String id = decode.getPayload("id").toString();
String environmentType = decode.getPayload("environmentType").toString();
String service = decode.getPayload("service").toString();
String extra = decode.getPayload("extra").toString();
Long expireTime = decode.getPayloads().getLong("time");
if (expireTime != null && expireTime < System.currentTimeMillis()) {
throw new ApiException("登录过期,请重新登陆");
}
tokenBean = new TokenBean(id, environmentType, service);
tokenBean.setExtra(extra);
} catch (Exception ignored) {
}
if (tokenBean == null && thrExp) {
throw new ApiException(StrUtil.isEmpty(token) ? "请先登录" : "登录过期,请重新登陆");
}
if (tokenBean == null) {
tokenBean = new TokenBean();
tokenBean.setId("");
}
return tokenBean;
}
///////////////////////////////////////////////////////////////////////////
// setter\getter
///////////////////////////////////////////////////////////////////////////
public Map<String, TokenBean> getIgnores() {
return ignores;
}
public void setIgnores(Map<String, TokenBean> ignores) {
this.ignores = ignores;
}
public String getEncryptKey() {
return encryptKey;
}
public void setEncryptKey(String encryptKey) {
this.encryptKey = encryptKey;
}
public Integer getExpireHours() {
return expireHours;
}
public void setExpireHours(Integer expireHours) {
this.expireHours = expireHours;
}
}

View File

@@ -0,0 +1,78 @@
package com.tiesheng.login.config.token.bean;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.jwt.JWT;
import com.tiesheng.login.config.token.TsTokenConfig;
/**
* @author hao
*/
public class TokenBean {
private String id;
private String environmentType;
private String service;
private String extra;
public TokenBean() {
}
public TokenBean(String id, String environmentType, String service) {
this.id = id;
this.environmentType = environmentType;
this.service = service;
this.extra = "";
}
/**
* 设置token
*/
public String toToken() {
TsTokenConfig tsTokenConfig = SpringUtil.getBean(TsTokenConfig.class);
return JWT.create()
.setPayload("id", getId())
.setPayload("environmentType", getEnvironmentType())
.setPayload("service", getService())
.setPayload("extra", getExtra())
.setPayload("time", System.currentTimeMillis() + tsTokenConfig.getExpireHours() * 1000 * 60 * 60)
.setKey(tsTokenConfig.getEncryptKey().getBytes())
.sign();
}
///////////////////////////////////////////////////////////////////////////
// setter\getter
///////////////////////////////////////////////////////////////////////////
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getEnvironmentType() {
return environmentType;
}
public void setEnvironmentType(String environmentType) {
this.environmentType = environmentType;
}
public String getService() {
return service;
}
public void setService(String service) {
this.service = service;
}
public String getExtra() {
return extra;
}
public void setExtra(String extra) {
this.extra = extra;
}
}

View File

@@ -0,0 +1,94 @@
package com.tiesheng.login.config.zust;
public class CasLoginDTO {
private String data;
/**
* 工号
*/
private String casUser;
/**
* 用户容器
*/
private String casUserContainerId;
/**
* 用户姓名
*/
private String casUserCn;
/**
* 用户别名
*/
private String casUserAlias;
/**
* 用户所在组
*/
private String casUserMemberOf;
/**
* 用户性别
*/
private String casUserGender;
///////////////////////////////////////////////////////////////////////////
// setter\getter
///////////////////////////////////////////////////////////////////////////
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public String getCasUser() {
return casUser;
}
public void setCasUser(String casUser) {
this.casUser = casUser;
}
public String getCasUserContainerId() {
return casUserContainerId;
}
public void setCasUserContainerId(String casUserContainerId) {
this.casUserContainerId = casUserContainerId;
}
public String getCasUserCn() {
return casUserCn;
}
public void setCasUserCn(String casUserCn) {
this.casUserCn = casUserCn;
}
public String getCasUserAlias() {
return casUserAlias;
}
public void setCasUserAlias(String casUserAlias) {
this.casUserAlias = casUserAlias;
}
public String getCasUserMemberOf() {
return casUserMemberOf;
}
public void setCasUserMemberOf(String casUserMemberOf) {
this.casUserMemberOf = casUserMemberOf;
}
public String getCasUserGender() {
return casUserGender;
}
public void setCasUserGender(String casUserGender) {
this.casUserGender = casUserGender;
}
}

View File

@@ -0,0 +1,188 @@
package com.tiesheng.login.controller;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import com.alibaba.fastjson.JSON;
import com.tiesheng.annotation.token.TokenIgnore;
import com.tiesheng.login.config.token.bean.TokenBean;
import com.tiesheng.login.pojos.dto.UniqueIndexDTO;
import com.tiesheng.login.service.TieshengLoginConfigurer;
import com.tiesheng.platform.config.ding.PlatformDingConfig;
import com.tiesheng.platform.config.ding.bean.DingJsapiSignature;
import com.tiesheng.platform.config.ding.bean.DingUserInfo;
import com.tiesheng.platform.config.wxmp.PlatformWxmpConfig;
import com.tiesheng.platform.config.wxmp.bean.WxJsapiSignature;
import com.tiesheng.platform.config.wxmp.bean.WxUserInfo;
import com.tiesheng.util.config.GlobalConfig;
import com.tiesheng.util.exception.ApiException;
import com.tiesheng.util.pojos.ApiResp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Map;
/**
* @author hao
*/
@RestController
@RequestMapping("/login")
public class LoginController {
@Autowired
PlatformWxmpConfig platformWxmpConfig;
@Autowired
PlatformDingConfig platformDingConfig;
@Autowired
TieshengLoginConfigurer tieshengLoginConfigurer;
@Autowired
GlobalConfig globalConfig;
/**
* 唯一值登录方式,如学号,手机号等
*
* @return
*/
@GetMapping("/unique/redirect")
@TokenIgnore
public void uniqueIndex(UniqueIndexDTO dto, HttpServletResponse response) {
TokenBean tokenBean = tieshengLoginConfigurer.doLogin("unique_index_" + dto.getPlatform(),
dto.getNo(), dto.getPlatform(), dto.getInfo());
tieshengLoginConfigurer.onLoginRedirect(tokenBean, dto.getExtra(), response);
}
/**
* 授权登录
*
* @param dto
* @return
*/
@PostMapping("/unique/index")
@TokenIgnore
public ApiResp<String> uniqueIndex(@RequestBody UniqueIndexDTO dto) {
TokenBean tokenBean = tieshengLoginConfigurer.doLogin("unique_index_" + dto.getPlatform(),
dto.getNo(), dto.getPlatform(), dto.getInfo());
if (tokenBean == null) {
throw new ApiException("登录失败");
}
return ApiResp.respOK(tokenBean.toToken());
}
///////////////////////////////////////////////////////////////////////////
// 钉钉相关授权
///////////////////////////////////////////////////////////////////////////
/**
* 钉钉授权登录
*
* @param service
* @param extra
* @param response
*/
@GetMapping("/ding/index/{service}")
@TokenIgnore
public void dingIndex(@PathVariable String service, String extra, HttpServletResponse response) {
if (StrUtil.isEmpty(extra)) {
extra = "";
}
Map<String, String> map = MapUtil.newHashMap();
map.put("corpId", platformDingConfig.getConfigBean(service).getCorpId());
map.put("service", service);
map.put("extra", extra);
String query = URLUtil.buildQuery(map, Charset.defaultCharset());
String configUrl = globalConfig.buildPath("/ding/index.html?" + query);
try {
response.sendRedirect(configUrl);
} catch (IOException ignored) {
}
}
/**
* 钉钉授权回调
*
* @param service
*/
@RequestMapping("/ding/oauth2/{service}")
@TokenIgnore
public void dingOauth2(@PathVariable String service, String code, String extra, HttpServletResponse response) {
String ddUserId = platformDingConfig.getUserIdByCode(service, code);
DingUserInfo dingUserInfo = platformDingConfig.topapiV2UserGet(service, ddUserId);
TokenBean tokenBean = tieshengLoginConfigurer.doLogin(dingUserInfo.getAppId(), dingUserInfo.getUserid(), "ding",
JSON.toJSONString(dingUserInfo));
tieshengLoginConfigurer.onLoginRedirect(tokenBean, extra, response);
}
/**
* 钉钉授权jssdk
*
* @param url
* @return
*/
@GetMapping("/ding/jssdk/{service}")
@TokenIgnore
public ApiResp<DingJsapiSignature> dingJssdk(@PathVariable String service, String url) {
DingJsapiSignature jsapiSignature = platformDingConfig.createJsapiSignature(service, url);
return ApiResp.respOK(jsapiSignature);
}
///////////////////////////////////////////////////////////////////////////
// 微信相关
///////////////////////////////////////////////////////////////////////////
/**
* 微信授权登录
*
* @return
*/
@RequestMapping("/wxmp/index/{service}")
@TokenIgnore
public void wxmpIndex(@PathVariable String service, String extra, HttpServletResponse response) throws IOException {
if (StrUtil.isEmpty(extra)) {
extra = "";
}
String configUrl = globalConfig.buildPath("/auth/wxmp/oauth2/" + service + "?extra=" + extra);
String authorizationUrl = platformWxmpConfig.buildAuthorizationUrl(service, configUrl, "snsapi_userinfo");
response.sendRedirect(authorizationUrl);
}
/**
* 微信授权回调
*
* @param code
*/
@RequestMapping("/wxmp/oauth2/{service}")
@TokenIgnore
public void wxmpOauth2(@PathVariable String service, String code, String extra, HttpServletResponse response) {
WxUserInfo wxUserInfo = platformWxmpConfig.getOAuth2AccessToken(service, code);
TokenBean tokenBean = tieshengLoginConfigurer.doLogin(wxUserInfo.getAppId(), wxUserInfo.getOpenid(), "wxmp", JSON.toJSONString(wxUserInfo));
tieshengLoginConfigurer.onLoginRedirect(tokenBean, extra, response);
}
/**
* 微信授权jssdk
*
* @param url
* @return
*/
@GetMapping("/wxmp/jssdk/{service}")
@TokenIgnore
public ApiResp<WxJsapiSignature> wxmpJssdk(@PathVariable String service, String url) {
WxJsapiSignature jsapiSignature = platformWxmpConfig.createJsapiSignature(service, url);
return ApiResp.respOK(jsapiSignature);
}
}

View File

@@ -0,0 +1,50 @@
package com.tiesheng.login.pojos.dto;
import cn.hutool.core.util.StrUtil;
public class UniqueIndexDTO {
private String no;
private String platform;
private String extra;
private String info;
///////////////////////////////////////////////////////////////////////////
// setter\getter
///////////////////////////////////////////////////////////////////////////
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getPlatform() {
return platform;
}
public void setPlatform(String platform) {
this.platform = platform;
}
public String getExtra() {
if (StrUtil.isEmpty(extra)) {
extra = "";
}
return extra;
}
public void setExtra(String extra) {
this.extra = extra;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}

View File

@@ -0,0 +1,30 @@
package com.tiesheng.login.service;
import com.tiesheng.login.config.token.bean.TokenBean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.http.HttpServletResponse;
/**
* @author hao
*/
@Configuration
public interface TieshengLoginConfigurer {
/**
* 执行登录
*
* @return
*/
TokenBean doLogin(String appId, String uniqueId, String platfrom, String info);
/**
* 授权登录回调
*
* @param tokenBean
*/
void onLoginRedirect(TokenBean bean, String extra, HttpServletResponse response);
}

View File

@@ -0,0 +1,26 @@
package com.tiesheng.login.service.impl;
import com.tiesheng.login.config.token.bean.TokenBean;
import com.tiesheng.login.service.TieshengLoginConfigurer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.http.HttpServletResponse;
/**
* @author hao
*/
@Configuration
@ConditionalOnMissingBean(value = TieshengLoginConfigurer.class, ignored = DefaultLoginConfigurer.class)
public class DefaultLoginConfigurer implements TieshengLoginConfigurer {
@Override
public TokenBean doLogin(String appId, String uniqueId, String platfrom, String info) {
return null;
}
@Override
public void onLoginRedirect(TokenBean bean, String extra, HttpServletResponse response) {
}
}