From 1c66d394049a07320f108c282b792b80e512778c Mon Sep 17 00:00:00 2001 From: ludc Date: 星期四, 14 九月 2023 09:04:09 +0800 Subject: [PATCH] 代码提交 --- /dev/null | 95 ------------------- Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthProvider.java | 1 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java | 1 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeTokenEndPoint.java | 3 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/BladeTokenGranter.java | 2 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/PwdFreeLoginTokenGranter.java | 116 +++++++++++++++++++++++ Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java | 4 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeResourceServerConfiguration.java | 1 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java | 17 ++- Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/SocialTokenGranter.java | 1 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/PasswordFreeLoginController.java | 10 - 11 files changed, 141 insertions(+), 110 deletions(-) diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeResourceServerConfiguration.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeResourceServerConfiguration.java index f30b930..5f680cc 100644 --- a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeResourceServerConfiguration.java +++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeResourceServerConfiguration.java @@ -38,7 +38,6 @@ .antMatchers( "/actuator/**", "/oauth/captcha", - "/oauth/passwordFreeLogin", "/oauth/logout", "/oauth/clear-cache", "/oauth/render/**", diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeTokenEndPoint.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeTokenEndPoint.java index 6a35d65..40ac34d 100644 --- a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeTokenEndPoint.java +++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeTokenEndPoint.java @@ -32,7 +32,9 @@ import org.springblade.core.tool.support.Kv; import org.springblade.core.tool.utils.StringUtil; import org.springblade.core.tool.utils.WebUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.InsufficientAuthenticationException; import org.springframework.security.core.Authentication; @@ -59,6 +61,7 @@ import java.security.Principal; import java.util.Collections; +import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpSession; diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/PwdFreeLoginEndpoint.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/PwdFreeLoginEndpoint.java deleted file mode 100644 index df1a80c..0000000 --- a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/PwdFreeLoginEndpoint.java +++ /dev/null @@ -1,95 +0,0 @@ -//package com.vci.ubcs.auth.endpoint; -// -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.http.HttpStatus; -//import org.springframework.http.ResponseEntity; -//import org.springframework.security.core.Authentication; -//import org.springframework.security.oauth2.common.OAuth2AccessToken; -//import org.springframework.security.oauth2.provider.ClientDetailsService; -//import org.springframework.security.oauth2.provider.OAuth2RequestFactory; -//import org.springframework.security.oauth2.provider.TokenGranter; -//import org.springframework.security.oauth2.provider.TokenRequest; -//import org.springframework.security.oauth2.provider.endpoint.TokenEndpoint; -//import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices; -//import org.springframework.stereotype.Component; -//import org.springframework.util.LinkedMultiValueMap; -//import org.springframework.util.MultiValueMap; -//import org.springframework.web.HttpRequestMethodNotSupportedException; -//import org.springframework.web.bind.annotation.PostMapping; -//import org.springframework.web.bind.annotation.RequestMapping; -//import org.springframework.web.bind.annotation.RequestMethod; -//import org.springframework.web.bind.annotation.RequestParam; -// -//import java.util.Map; -// -///** -// * 鍏嶅瘑鐧诲綍 -// * @author ludc -// * @date 2023/9/12 18:03 -// */ -//@Component -//public class PwdFreeLoginEndpoint extends TokenEndpoint { -// -// -// @Autowired -// private AuthorizationServerTokenServices tokenServices; -// -// @Autowired -// private ClientDetailsService clientDetailsService; -// -// /*@Autowired -// private OAuth2RequestFactory requestFactory; -// -// @Autowired -// private TokenGranter tokenGranter;*/ -// -// @RequestMapping(value = "/oauth/password-free-login",method = RequestMethod.GET) -// public ResponseEntity<OAuth2AccessToken> getPasswordFreeLogin(@RequestParam Map<String, String> parameters) throws HttpRequestMethodNotSupportedException { -// return postPasswordFreeLogin(parameters); -// } -// -// @RequestMapping(value = "/oauth/password-free-login",method = RequestMethod.POST) -// public ResponseEntity<OAuth2AccessToken> postPasswordFreeLogin(@RequestParam Map<String, String> parameters) throws HttpRequestMethodNotSupportedException { -// // 鍒ゆ柇鏄惁婊¤冻鍏嶅瘑鐧诲綍鐨勬潯浠� -// if (isSkipLogin(parameters)) { -// // 鐢熸垚璁块棶浠ょ墝 -// OAuth2AccessToken accessToken = createAccessToken(parameters); -// // 杩斿洖璁块棶浠ょ墝 -// return ResponseEntity.ok(accessToken); -// } -// -// // 涓嶆弧瓒冲厤瀵嗙櫥褰曟潯浠讹紝杩斿洖閿欒淇℃伅 -// return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); -// } -// -// private boolean isSkipLogin(Map<String, String> parameters) { -// // 鏍规嵁鍏蜂綋闇�姹傚垽鏂槸鍚︽弧瓒冲厤瀵嗙櫥褰曠殑鏉′欢 -// // 渚嬪锛屽垽鏂姹傚弬鏁颁腑鏄惁鍖呭惈鏌愪釜鐗瑰畾鐨勬爣璇嗙 -// return parameters.containsKey("skipLogin"); -// } -// -// private OAuth2AccessToken createAccessToken(Map<String, String> parameters) throws HttpRequestMethodNotSupportedException { -// // 鏋勯�犺姹傚弬鏁� -// MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); -// for (Map.Entry<String, String> entry : parameters.entrySet()) { -// params.add(entry.getKey(), entry.getValue()); -// } -// -// // 璋冪敤TokenEndpoint鐨刾ostAccessToken鏂规硶鐢熸垚璁块棶浠ょ墝 -// //return postAccessToken(PrincipalUtils.getPrincipal(), params).getBody(); -// return null; -// } -// -// private ResponseEntity<OAuth2AccessToken> postAccessToken(Authentication authentication, MultiValueMap<String, String> parameters) throws HttpRequestMethodNotSupportedException { -// // 鏋勯�犺姹� -// // TokenRequest tokenRequest = requestFactory.createTokenRequest(parameters, clientDetailsService.loadClientByClientId("your-client-id")); -// -// // 鐢熸垚璁块棶浠ょ墝 -// // OAuth2AccessToken accessToken = tokenGranter.grant("password", tokenRequest); -// -// // 杩斿洖璁块棶浠ょ墝 -// //return ResponseEntity.ok(accessToken); -// return null; -// } - -//} diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/BladeTokenGranter.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/BladeTokenGranter.java index 5a6306a..e0b3d30 100644 --- a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/BladeTokenGranter.java +++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/BladeTokenGranter.java @@ -45,6 +45,8 @@ granters.add(new CaptchaTokenGranter(authenticationManager, endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), bladeRedis)); // 澧炲姞绗笁鏂圭櫥闄嗘ā寮� granters.add(new SocialTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), userClient, socialProperties)); + // 澧炲姞鍏嶅瘑鐧婚檰妯″紡 + //granters.add(new PwdFreeLoginTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), userClient, socialProperties)); // 缁勫悎tokenGranter闆嗗悎 return new CompositeTokenGranter(granters); } diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/PwdFreeLoginTokenGranter.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/PwdFreeLoginTokenGranter.java new file mode 100644 index 0000000..aab9a47 --- /dev/null +++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/PwdFreeLoginTokenGranter.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 搴勯獮 (smallchill@163.com) + */ +package com.vci.ubcs.auth.granter; + +import com.vci.ubcs.auth.constant.AuthConstant; +import com.vci.ubcs.auth.service.BladeUserDetails; +import com.vci.ubcs.auth.utils.TokenUtil; +import com.vci.ubcs.system.user.entity.User; +import com.vci.ubcs.system.user.entity.UserInfo; +import com.vci.ubcs.system.user.entity.UserOauth; +import com.vci.ubcs.system.user.feign.IUserClient; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthResponse; +import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.request.AuthRequest; +import org.springblade.core.social.props.SocialProperties; +import org.springblade.core.social.utils.SocialUtil; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.support.Kv; +import org.springblade.core.tool.utils.BeanUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.WebUtil; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AbstractAuthenticationToken; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.authority.AuthorityUtils; +import org.springframework.security.oauth2.common.exceptions.InvalidGrantException; +import org.springframework.security.oauth2.provider.*; +import org.springframework.security.oauth2.provider.token.AbstractTokenGranter; +import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; + +/** + * 绗笁鏂圭櫥褰曡璇佺被 + * + * @author Chill + */ +public class PwdFreeLoginTokenGranter extends AbstractTokenGranter { + private static final String GRANT_TYPE = "passwordfree"; + private static final Integer AUTH_SUCCESS_CODE = 2000; + private final AuthenticationManager authenticationManager; + + public PwdFreeLoginTokenGranter(AuthenticationManager authenticationManager, AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory) { + super(tokenServices, clientDetailsService, requestFactory, GRANT_TYPE); + this.authenticationManager = authenticationManager; + } + + @Override + protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) { + // 璇锋眰澶寸鎴蜂俊鎭� + HttpServletRequest request = WebUtil.getRequest(); + String tenantId = Func.toStr(request.getHeader(TokenUtil.TENANT_HEADER_KEY), TokenUtil.DEFAULT_TENANT_ID); + + // 鑾峰彇璇锋眰鍙傛暟 + Map<String, String> parameters = new LinkedHashMap<>(tokenRequest.getRequestParameters()); + + // 鏍规嵁鍙傛暟杩涜鑷畾涔夌殑鎺堟潈閫昏緫 + // 绀轰緥涓娇鐢ㄤ簡纭紪鐮佺殑鏂瑰紡楠岃瘉璐﹀彿鍜岀敓鎴愭巿鏉冧俊鎭� + String userName = parameters.get("username"); + String password = parameters.get("password"); + // 缁勮鏁版嵁 + //UserOauth userOauth = Objects.requireNonNull(BeanUtil.copy(authUser, UserOauth.class)); + //userOauth.setTenantId(tenantId); + //userOauth.setUuid(authUser.getUuid()); + + // 杩滅▼璋冪敤锛岃幏鍙栬璇佷俊鎭� + //R<UserInfo> result = userClient.userAuthInfo(userOauth); + BladeUserDetails bladeUserDetails = null; + // 閰嶇疆鐨勫瘑鐮侊紝鎵�鏈夎蛋鍏嶅瘑鎺ュ彛鐨勯兘璁剧疆缁熶竴鐨勫瘑鐮� + if ("password".equals(password)) { + // 鏋勫缓鎺堟潈淇℃伅 + //User user = result.getData().getUser(); + //Kv detail = result.getData().getDetail(); +// if (user == null || user.getId() == null) { +// throw new InvalidGrantException("social grant failure, user is null"); +// } +// bladeUserDetails = new BladeUserDetails(user.getId(), +// tenantId, result.getData().getOauthId(), userName, "webservice鍏嶅瘑鐧诲綍", "0", "0", "0", "0", Func.toStr(userOauth.getAvatar(), TokenUtil.DEFAULT_AVATAR), +// userName, AuthConstant.ENCRYPT + password, detail, true, true, true, true, +// AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles()))); + } else { + throw new InvalidGrantException("passwordfree grant failure, auth response is not success"); + } + + // 缁勮璁よ瘉鏁版嵁锛屽叧闂瘑鐮佹牎楠� + Authentication userAuth = new UsernamePasswordAuthenticationToken(bladeUserDetails, null, bladeUserDetails.getAuthorities()); + ((AbstractAuthenticationToken) userAuth).setDetails(parameters); + OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest); + + // 杩斿洖 OAuth2Authentication + return new OAuth2Authentication(storedOAuth2Request, userAuth); + } + +} diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/SocialTokenGranter.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/SocialTokenGranter.java index 316c81c..062783c 100644 --- a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/SocialTokenGranter.java +++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/SocialTokenGranter.java @@ -42,6 +42,7 @@ import org.springframework.security.oauth2.provider.*; import org.springframework.security.oauth2.provider.token.AbstractTokenGranter; import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices; +import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import java.util.LinkedHashMap; diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthProvider.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthProvider.java index 49598e2..7b8dd95 100644 --- a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthProvider.java +++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthProvider.java @@ -34,6 +34,7 @@ static { DEFAULT_SKIP_URL.add("/example"); DEFAULT_SKIP_URL.add("/oauth/token/**"); + DEFAULT_SKIP_URL.add("/oauth/password-free-login/**"); DEFAULT_SKIP_URL.add("/oauth/captcha/**"); DEFAULT_SKIP_URL.add("/oauth/clear-cache/**"); DEFAULT_SKIP_URL.add("/oauth/user-info"); diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/PasswordFreeLoginController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/PasswordFreeLoginController.java index 4e04c10..7b4157f 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/PasswordFreeLoginController.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/PasswordFreeLoginController.java @@ -3,9 +3,7 @@ import com.vci.ubcs.code.service.IPasswordFreeLoginService; import io.swagger.annotations.Api; import org.springblade.core.tool.api.R; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -21,9 +19,9 @@ @Resource private IPasswordFreeLoginService passwordFreeLoginService; - @GetMapping("/login") - public R passwordFreeLogin(String account) { - boolean resBoolean = passwordFreeLoginService.passwordFreeLogin(account); + @PostMapping("/login") + public R passwordFreeLogin(@RequestParam String username) { + boolean resBoolean = passwordFreeLoginService.passwordFreeLogin(username); return R.status(resBoolean); } diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java index c202116..bbe7802 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java @@ -9,10 +9,10 @@ /** * 鍏嶅瘑鐧诲綍鏂规硶 - * @param account 璐﹀彿 + * @param username 璐﹀彿 * @return */ - boolean passwordFreeLogin(String account); + boolean passwordFreeLogin(String username); } diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java index 6a3d868..212e250 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java @@ -3724,6 +3724,7 @@ if (listR.getData().isEmpty()) { throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); } + // TODO:鍙傜収閰嶇疆鐨勬ā绯婃煡璇㈣繃婊ゆ潯浠舵殏鏈鐞� String namesql = ""; if (StringUtils.isNotBlank(baseQueryObject.getConditionMap().get("name"))) { String s = baseQueryObject.getConditionMap().get("name"); diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java index 5134140..9d619a3 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java @@ -47,24 +47,29 @@ /** * 鍏嶅瘑鐧诲綍 - * @param account 璐﹀彿 + * @param username 璐﹀彿 * @return */ @Override - public boolean passwordFreeLogin(String account) { + public boolean passwordFreeLogin(String username) { // 鍏嶅瘑鐧诲綍鎺ュ彛鍦板潃 - String loginUrl = "http://localhost:"+this.getGatewayPort()+"/ubcs-auth/oauth/passwordFreeLogin?username=admin&grant_type=captcha&scope=all&type=account"; + String loginUrl = "http://localhost:"+this.getGatewayPort()+"/ubcs-auth/oauth/password-free-login"; // 璁剧疆璇锋眰澶� HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + headers.set("Authorization", "Basic c3dvcmQ6c3dvcmRfc2VjcmV0"); + headers.set("Tenant-Id", "000000"); //璁剧疆璇锋眰浣撳弬鏁� - MultiValueMap<String,String> bodyParams = new LinkedMultiValueMap<String,String>(); - bodyParams.add("account",account); + MultiValueMap<String,String> parameters = new LinkedMultiValueMap<String,String>(); + parameters.add("username",username); + parameters.add("grant_type", "captcha"); + parameters.add("scope", "all"); + parameters.add("type", "account"); // 鍙戦�丳OST璇锋眰 - String responseBody = HttpUtils.post(loginUrl, bodyParams); + String responseBody = HttpUtils.post(loginUrl, parameters,headers); System.out.println(responseBody); //鎷垮埌鍝嶅簲浣撳皢token瀛樺叆鍒皉edis涓紝浠ccount浣滀负瀛樺偍鐨刱ey -- Gitblit v1.9.3