Source/UBCS-WEB/src/views/system/user.vue
@@ -404,6 +404,7 @@ { label: 'å¯ç ', prop: 'password', type: "password", hide: true, editDisplay: false, viewDisplay: false, @@ -413,6 +414,7 @@ label: '确认å¯ç ', prop: 'password2', hide: true, type: "password", editDisplay: false, viewDisplay: false, rules: [{required: true, validator: validatePass2, trigger: 'blur'}] Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeSocialEndpoint.java
@@ -62,22 +62,6 @@ } /** * ä¸OAç³»ç»çåç¹ç»å½ */ @GetMapping("/oauth/oasso") public ModelAndView require(HttpServletRequest request, ModelAndView model) { // 1ãæ¿å°ç¨æ·çé´æä¿¡æ¯ String userName = request.getParameter("username"); // 2ãè°ç¨é´æç»å½æ¥å£ï¼è¿ééç¨ææç æ¨¡å¼ // 3ãæå»ºè¯·æ±å°åï¼ //HttpUtils.post(); model.setViewName("login"); return model; } /** * è·å认è¯ä¿¡æ¯ */ @RequestMapping("/oauth/callback/{source}") Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/AESUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ package com.vci.ubcs.starter.util; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; /** * @author ludc * @date 2023/9/20 11:08 */ public class AESUtils { /** * aeså å¯ * @param content å¾ å 坿°æ® * @param key å¯é¥ * @return * @throws Exception */ public static String aesEncrypt(String content, String key) throws Exception { //æå®å å¯ç®æ³ Cipher cipher = Cipher.getInstance("AES"); //å建å å¯è§åï¼æå®keyåå å¯ç±»å SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES"); //æå®å 坿¨¡å¼ä¸ºå å¯ï¼æå®å å¯è§å cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); //è°ç¨å 坿¹æ³ byte[] result = cipher.doFinal(content.getBytes()); //ç¨Base64ç¼ç return new String(Base64.getEncoder().encode(result)); } /** * aesè§£å¯ * @param content å¾ è§£å¯æ°æ® * @param key å¯é¥ * @return * @throws Exception */ public static String aesDecrypt(String content, String key) throws Exception { //Base64è§£ç byte[] result = Base64.getDecoder().decode(content); //æå®å å¯ç®æ³ Cipher cipher = Cipher.getInstance("AES"); //å建å å¯è§åï¼æå®keyåå å¯ç±»å SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES"); //æå®å 坿¨¡å¼ä¸ºè§£å¯ï¼æå®å å¯è§å cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); return new String(cipher.doFinal(result)); } } Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
@@ -658,7 +658,6 @@ return engineService.getFlowUIInfoByClassifyOid(codeClassifyOid,functionId,templateId,taskId,modelKey); } @GetMapping("/thisistest") @ResponseBody public Integer thisistest(String codeClassifyOid, String functionId) throws Exception { @@ -726,7 +725,7 @@ * @param referConfigVO åç §çé ç½®ä¿¡æ¯ * @return æ§è¡çç»æ */ @GetMapping("/defaultReferDataGrid") @RequestMapping(value = "/defaultReferDataGrid",method = {RequestMethod.POST, RequestMethod.GET}) public IPage<BaseModelVO> defaultReferDataGrid(UIFormReferVO referConfigVO, BaseQueryObject baseQueryObject){ return engineService.referDataGrid(referConfigVO,baseQueryObject); } Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/PasswordFreeLoginController.java
@@ -2,12 +2,18 @@ import com.vci.ubcs.code.service.IPasswordFreeLoginService; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.tool.api.R; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import static com.vci.ubcs.starter.util.AESUtils.aesDecrypt; import static com.vci.ubcs.starter.util.AESUtils.aesEncrypt; /** * @author ludc @@ -16,20 +22,40 @@ @RestController @RequestMapping("/passwordFree") @Api(value = "å å¯ç»å½æ¥å£", tags = "å å¯ç»å½æ¥å£") @Slf4j public class PasswordFreeLoginController { @Resource private IPasswordFreeLoginService passwordFreeLoginService; @PostMapping("/login") public R passwordFreeLogin(@RequestParam String username, HttpServletRequest request) { public R passwordFreeLogin(@RequestParam("userName") String username, HttpServletRequest request) { boolean status; try { status = passwordFreeLoginService.passwordFreeLogin(username,request); status = passwordFreeLoginService.pwdFreeLoginByBoolean(username,request); }catch (Exception e){ throw new ServiceException("å å¯ç»å½è·åtoken失败ï¼"+e.getMessage()); } return R.status(status); } /** * åç¹ç»å½ * @param request * @return * @throws Exception */ @GetMapping("/ssoLogin") public ModelAndView oaSsoLogin(HttpServletRequest request, ModelAndView model){ String token; try { token = passwordFreeLoginService.ssoFreeLogin(request); }catch (Exception e){ throw new ServiceException("åç¹ç»å½è·åtoken失败:"+e.getMessage()); } model.addObject("token",token); model.setViewName("sso"); return model; } } Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java
@@ -19,10 +19,28 @@ String getGatewayPort(String serviceId); /** * å å¯ç»å½æ¹æ³ * å å¯ç»å½ï¼æ¹åå½åwebservice请æ±çheader * @param userName è´¦å· * @return * @param servletRequest * @return boolean * @throws AuthenticationException */ boolean passwordFreeLogin(String userName, ServletRequest request) throws AuthenticationException; boolean pwdFreeLoginByBoolean(String userName, ServletRequest servletRequest) throws AuthenticationException; /** * å å¯ç»å½è¯·æ±åé * @param userName è´¦å· * @return è¿åtoken * @throws AuthenticationException */ String passwordFreeLogin(String userName) throws AuthenticationException; /** * åç¹ç»å½ * @param servletRequest * @return * @throws Exception */ String ssoFreeLogin(ServletRequest servletRequest) throws Exception; } Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java
@@ -33,6 +33,8 @@ import java.util.Map; import java.util.logging.Logger; import static com.vci.ubcs.starter.util.AESUtils.aesDecrypt; import static com.vci.ubcs.starter.util.AESUtils.aesEncrypt; import static org.springblade.core.secure.utils.AuthUtil.parseJWT; /** @@ -47,14 +49,23 @@ // éè¿æå¡æ³¨åä¸å¿è·åç½å ³ç端å£å· @Autowired private DiscoveryClient discoveryClient; // é ç½®çå å¯ç»å½çè´¦å·æå±çç§æ·id @Value("${password-free.pwd-free-tenant-id}") @Value("${password-free.pwd-free-tenant-id:000000}") private String pwdFreeTenantId; // é ç½®çtokenå¨redisä¸ççåæ¶é´ @Value("${password-free.token-redis-expire}") @Value("${password-free.token-redis-expire:36000}") private Long tokenRedisExpire; @Value("${password-free.pwd-free-addr}") @Value("${password-free.pwd-free-addr:localhost}") private String pwdFreeAddr; @Value("${password-free.client-id:a104c4fd2f0e4958}") private String clientId;//åºç¨ID @Value("${password-free.secret-key:9fbd170bd83eb869}") private String secretKey;//åºç¨ç§é¥ @Autowired private BladeRedis bladeRedis; @@ -79,10 +90,12 @@ /** * å å¯ç»å½ï¼æ¹åå½åwebservice请æ±çheader * @param userName è´¦å· * @return * @param servletRequest * @return boolean * @throws AuthenticationException */ @Override public boolean passwordFreeLogin(String userName, ServletRequest servletRequest) throws AuthenticationException { public boolean pwdFreeLoginByBoolean(String userName, ServletRequest servletRequest) throws AuthenticationException { //è¿æ¥å 夿ç¼å䏿¯å¦åå¨token // è¯·æ±æ¥èªå·±åªä¸ªipå°å HttpServletRequest request = (HttpServletRequest) servletRequest; @@ -94,27 +107,7 @@ BladeUser user = this.getUser(token2); //ä¸åå¨å°±è¯·æ± if(Func.isEmpty(authToken) || Func.isEmpty(user)){ // å å¯ç»å½æ¥å£å°å String loginUrl = "http://"+pwdFreeAddr+":"+this.getGatewayPort("ubcs-gateway")+"/ubcs-auth/oauth/token"; log.debug("å½åå å¯ç»å½è°ç¨å°åï¼"+loginUrl); // 请æ±ubcs-authæå¡è·åtokenï¼å 设置请æ±å¤´ HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); headers.set("Authorization", "Basic c3dvcmQ6c3dvcmRfc2VjcmV0"); headers.set("Tenant-Id", pwdFreeTenantId); //设置请æ±ä½åæ° MultiValueMap<String,String> parameters = new LinkedMultiValueMap<String,String>(); parameters.add("username",userName); parameters.add("grant_type", "passwordfree"); parameters.add("scope", "all"); parameters.add("type", "account"); String responseBody = null; try { // åéPOSTè¯·æ± responseBody = HttpUtils.post(loginUrl, parameters,headers); }catch (Exception e){ throw new AuthenticationException("è°ç¨é´ææå¡ubcs-auth失败ï¼åå ï¼"+e.getMessage()); } String responseBody = this.passwordFreeLogin(userName); //æ¿å°ååºä½å ¶ä¸å å«token,ç¨requestä¸çipå°åä½ä¸ºé®å¼ï¼å°tokenåå ¥ç¼å TokenUserObject tokenUserObject = null; try { @@ -132,6 +125,63 @@ //request.setAttribute("Blade-Auth",token); request.setAttribute("_BLADE_USER_REQUEST_ATTR_",user); return true; } /** * å å¯ç»å½è¯·æ±åé * @param userName è´¦å· * @return è¿åtoken * @throws AuthenticationException */ @Override public String passwordFreeLogin(String userName) throws AuthenticationException { // å å¯ç»å½æ¥å£å°å String loginUrl = "http://"+pwdFreeAddr+":"+this.getGatewayPort("ubcs-gateway")+"/ubcs-auth/oauth/token"; log.debug("å½åå å¯ç»å½è°ç¨å°åï¼"+loginUrl); // 请æ±ubcs-authæå¡è·åtokenï¼å 设置请æ±å¤´ HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); headers.set("Authorization", "Basic c3dvcmQ6c3dvcmRfc2VjcmV0"); headers.set("Tenant-Id", pwdFreeTenantId); //设置请æ±ä½åæ° MultiValueMap<String,String> parameters = new LinkedMultiValueMap<String,String>(); parameters.add("username",userName); parameters.add("grant_type", "passwordfree"); parameters.add("scope", "all"); parameters.add("type", "account"); String responseBody = null; try { // åéPOSTè¯·æ± responseBody = HttpUtils.post(loginUrl, parameters,headers); }catch (Exception e){ throw new AuthenticationException("è°ç¨é´ææå¡ubcs-auth失败ï¼åå ï¼"+e.getMessage()); } return responseBody; } /** * åç¹ç»å½ * @param servletRequest * @return * @throws Exception */ @Override public String ssoFreeLogin(ServletRequest servletRequest) throws Exception { HttpServletRequest request = (HttpServletRequest) servletRequest; String content = request.getHeader("empCode"); if(Func.isBlank(content)){ throw new ServiceException("æªè·åå°empCodeåæ°"); } //å å¯ String str1 = aesEncrypt(content, clientId); String str2 = aesEncrypt(str1, secretKey); String enStr1 = aesDecrypt(str2, secretKey); String enStr2 = aesDecrypt(enStr1, clientId); // è§£å¯ log.debug("åç¹ç»å½åæ°è§£å¯åï¼"+enStr2); String token = this.passwordFreeLogin("pwdfree"); return token; } /** @@ -215,6 +265,5 @@ return jwtProperties; } } Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -237,7 +237,7 @@ systemId = interParameterVO.getData().getSystemId(); UserVO userVo = interParameterVO.getData().getUser(); //å å¯ç»å½ç³è¯·tokenï¼request䏿·»å ç¨æ·ä¿¡æ¯ passwordFreeLoginService.passwordFreeLogin(userVo.getUserName(),this.getRequest()); passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); AuthUtil.getUser(); List<ClassfyVO> classVOList = classfysVO.getClassify(); InterParameterVO finalInterParameterVO = interParameterVO; @@ -975,7 +975,7 @@ systemId = interParameterVO.getData().getSystemId(); UserVO userVo = interParameterVO.getData().getUser(); //å å¯ç»å½ç³è¯·tokenï¼request䏿·»å ç¨æ·ä¿¡æ¯ passwordFreeLoginService.passwordFreeLogin(userVo.getUserName(),this.getRequest()); passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); List<ClassfyVO> classVOList = classfysVO.getClassify(); InterParameterVO finalInterParameterVO = interParameterVO; //è¿æ¯è´¦å·ä¿¡æ¯ @@ -1148,7 +1148,7 @@ QueryData queryData=queryClassifyVO.getData(); UserVO userVo=queryData.getUser(); //å å¯ç»å½ç³è¯·tokenï¼request䏿·»å ç¨æ·ä¿¡æ¯ passwordFreeLoginService.passwordFreeLogin(userVo.getUserName(),this.getRequest()); passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); systemId=queryData.getSystemId(); QueryLibraryVO libraryVO= queryData.getLibrary(); String libId= libraryVO.getId(); @@ -1308,7 +1308,7 @@ systemId=condtionsVO.getSystemId(); UserVO userVo=condtionsVO.getUser(); //å å¯ç»å½ç³è¯·tokenï¼request䏿·»å ç¨æ·ä¿¡æ¯ passwordFreeLoginService.passwordFreeLogin(userVo.getUserName(),this.getRequest()); passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); CondtionVO condtionVO= condtionsVO.getCondtion(); SessionInfo sessionInfo = new SessionInfo(); sessionInfo.setUserId(userVo.getUserName()); @@ -1523,7 +1523,7 @@ QueryData queryData=queryClassifyVO.getData(); UserVO userVo=queryData.getUser(); //å å¯ç»å½ç³è¯·tokenï¼request䏿·»å ç¨æ·ä¿¡æ¯ passwordFreeLoginService.passwordFreeLogin(userVo.getUserName(),this.getRequest()); passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); systemId=queryData.getSystemId(); QueryLibraryVO libraryVO= queryData.getLibrary(); String libId= libraryVO.getId();