fix(系统设置): i18n
This commit is contained in:
parent
dd4cce692a
commit
860db097a1
|
@ -11,6 +11,7 @@ import org.springframework.web.server.WebSession;
|
|||
import reactor.core.publisher.Mono;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Locale;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/ldap")
|
||||
|
@ -21,8 +22,8 @@ public class LdapController {
|
|||
|
||||
@PostMapping(value = "/signin")
|
||||
@MsAuditLog(module = OperLogModule.SYSTEM_PARAMETER_SETTING, type = OperLogConstants.LOGIN, title = "LDAP")
|
||||
public Mono<ResultHolder> login(@RequestBody LoginRequest request, WebSession session) {
|
||||
return Mono.just(ldapService.login(request, session))
|
||||
public Mono<ResultHolder> login(@RequestBody LoginRequest request, WebSession session, Locale locale) {
|
||||
return Mono.just(ldapService.login(request, session, locale))
|
||||
.map(ResultHolder::success);
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ import reactor.core.scheduler.Schedulers;
|
|||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RestController
|
||||
|
@ -64,8 +65,8 @@ public class LoginController {
|
|||
}
|
||||
|
||||
@PostMapping(value = "/signin")
|
||||
public Mono<ResultHolder> login(@RequestBody LoginRequest request, WebSession session) {
|
||||
return Mono.defer(() -> userLoginService.login(request, session).map(Mono::just).orElseGet(Mono::empty))
|
||||
public Mono<ResultHolder> login(@RequestBody LoginRequest request, WebSession session, Locale locale) {
|
||||
return Mono.defer(() -> userLoginService.login(request, session, locale).map(Mono::just).orElseGet(Mono::empty))
|
||||
.subscribeOn(Schedulers.boundedElastic())
|
||||
.switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.BAD_REQUEST, "Not found user info or invalid password")))
|
||||
.doOnNext(user -> session.getAttributes().put("user", user))
|
||||
|
|
|
@ -12,6 +12,7 @@ import org.springframework.web.reactive.result.view.Rendering;
|
|||
import org.springframework.web.server.WebSession;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Locale;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("sso")
|
||||
|
@ -21,24 +22,24 @@ public class SSOController {
|
|||
|
||||
@GetMapping("callback/{authId}")
|
||||
@MsAuditLog(module = OperLogModule.AUTH_TITLE, type = OperLogConstants.LOGIN, title = "登录")
|
||||
public Rendering callbackWithAuthId(@RequestParam("code") String code, @PathVariable("authId") String authId, WebSession session) throws Exception {
|
||||
ssoService.exchangeToken(code, authId, session);
|
||||
public Rendering callbackWithAuthId(@RequestParam("code") String code, @PathVariable("authId") String authId, WebSession session, Locale locale) throws Exception {
|
||||
ssoService.exchangeToken(code, authId, session, locale);
|
||||
return Rendering.redirectTo("/?_token=" + CodingUtil.base64Encoding(session.getId()))
|
||||
.build();
|
||||
}
|
||||
|
||||
@GetMapping("callback")
|
||||
@MsAuditLog(module = OperLogModule.AUTH_TITLE, type = OperLogConstants.LOGIN, title = "登录")
|
||||
public Rendering callback(@RequestParam("code") String code, @RequestParam("state") String authId, WebSession session) throws Exception {
|
||||
ssoService.exchangeToken(code, authId, session);
|
||||
public Rendering callback(@RequestParam("code") String code, @RequestParam("state") String authId, WebSession session, Locale locale) throws Exception {
|
||||
ssoService.exchangeToken(code, authId, session, locale);
|
||||
return Rendering.redirectTo("/?_token=" + CodingUtil.base64Encoding(session.getId()))
|
||||
.build();
|
||||
}
|
||||
|
||||
@GetMapping("/callback/cas/{authId}")
|
||||
@MsAuditLog(module = OperLogModule.AUTH_TITLE, type = OperLogConstants.LOGIN, title = "登录")
|
||||
public Rendering casCallback(@RequestParam("ticket") String ticket, @PathVariable("authId") String authId, WebSession session) throws Exception {
|
||||
ssoService.serviceValidate(ticket, authId, session);
|
||||
public Rendering casCallback(@RequestParam("ticket") String ticket, @PathVariable("authId") String authId, WebSession session, Locale locale) throws Exception {
|
||||
ssoService.serviceValidate(ticket, authId, session, locale);
|
||||
return Rendering.redirectTo("/?_token=" + CodingUtil.base64Encoding(session.getId()))
|
||||
.build();
|
||||
}
|
||||
|
|
|
@ -30,10 +30,7 @@ import org.springframework.web.server.WebSession;
|
|||
|
||||
import javax.annotation.Resource;
|
||||
import javax.naming.directory.DirContext;
|
||||
import java.util.Hashtable;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
|
||||
import static org.springframework.ldap.query.LdapQueryBuilder.query;
|
||||
|
||||
|
@ -71,7 +68,7 @@ public class LdapService {
|
|||
return authenticate(dn, credentials, ldapTemplate);
|
||||
}
|
||||
|
||||
public Optional<SessionUser> login(LoginRequest request, WebSession session) {
|
||||
public Optional<SessionUser> login(LoginRequest request, WebSession session, Locale locale) {
|
||||
String isOpen = service.getValue(ParamConstants.LDAP.OPEN.getValue());
|
||||
if (StringUtils.isBlank(isOpen) || StringUtils.equals(Boolean.FALSE.toString(), isOpen)) {
|
||||
MSException.throwException(Translator.get("ldap_authentication_not_enabled"));
|
||||
|
@ -118,7 +115,7 @@ public class LdapService {
|
|||
LoginRequest loginRequest = new LoginRequest();
|
||||
loginRequest.setUsername(userId);
|
||||
loginRequest.setAuthenticate(UserSource.LDAP.name());
|
||||
return userLoginService.login(loginRequest, session);
|
||||
return userLoginService.login(loginRequest, session, locale);
|
||||
}
|
||||
|
||||
private boolean authenticate(String dn, String credentials, LdapTemplate ldapTemplate) throws AuthenticationException {
|
||||
|
|
|
@ -42,6 +42,7 @@ import java.nio.charset.StandardCharsets;
|
|||
import java.security.KeyManagementException;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
@ -59,7 +60,7 @@ public class SSOService {
|
|||
@Resource
|
||||
private UserLoginService userLoginService;
|
||||
|
||||
public void exchangeToken(String code, String authId, WebSession session) throws Exception {
|
||||
public void exchangeToken(String code, String authId, WebSession session, Locale locale) throws Exception {
|
||||
AuthSource authSource = authSourceService.getAuthSource(authId);
|
||||
Map config = JSON.parseObject(authSource.getConfiguration(), Map.class);
|
||||
String tokenUrl = (String) config.get("tokenUrl");
|
||||
|
@ -90,7 +91,7 @@ public class SSOService {
|
|||
MSException.throwException(content);
|
||||
}
|
||||
|
||||
doOICDLogin(authSource, accessToken, session);
|
||||
doOICDLogin(authSource, accessToken, session, locale);
|
||||
}
|
||||
|
||||
private RestTemplate getRestTemplateIgnoreSSL() throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException {
|
||||
|
@ -116,7 +117,7 @@ public class SSOService {
|
|||
return new RestTemplate(requestFactory);
|
||||
}
|
||||
|
||||
private void doOICDLogin(AuthSource authSource, String accessToken, WebSession session) throws Exception {
|
||||
private void doOICDLogin(AuthSource authSource, String accessToken, WebSession session, Locale locale) throws Exception {
|
||||
Map config = JSON.parseObject(authSource.getConfiguration(), Map.class);
|
||||
String userInfoUrl = (String) config.get("userInfoUrl");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
@ -151,7 +152,7 @@ public class SSOService {
|
|||
MSException.throwException("email already exists!");
|
||||
}
|
||||
}
|
||||
Optional<SessionUser> userOptional = userLoginService.login(loginRequest, session);
|
||||
Optional<SessionUser> userOptional = userLoginService.login(loginRequest, session, locale);
|
||||
session.getAttributes().put("authenticate", authSource.getType());
|
||||
session.getAttributes().put("authId", authSource.getId());
|
||||
session.getAttributes().put("user", userOptional.get());
|
||||
|
@ -178,7 +179,7 @@ public class SSOService {
|
|||
/**
|
||||
* cas callback
|
||||
*/
|
||||
public void serviceValidate(String ticket, String authId, WebSession session) throws Exception {
|
||||
public void serviceValidate(String ticket, String authId, WebSession session, Locale locale) throws Exception {
|
||||
AuthSource authSource = authSourceService.getAuthSource(authId);
|
||||
Map config = JSON.parseObject(authSource.getConfiguration(), Map.class);
|
||||
String redirectUrl = ((String) config.get("redirectUrl")).replace("${authId}", authId);
|
||||
|
@ -208,7 +209,7 @@ public class SSOService {
|
|||
MSException.throwException("email already exists!");
|
||||
}
|
||||
}
|
||||
Optional<SessionUser> userOptional = userLoginService.login(loginRequest, session);
|
||||
Optional<SessionUser> userOptional = userLoginService.login(loginRequest, session, locale);
|
||||
session.getAttributes().put("authenticate", authSource.getType());
|
||||
session.getAttributes().put("authId", authSource.getId());
|
||||
session.getAttributes().put("user", userOptional.get());
|
||||
|
|
|
@ -17,6 +17,7 @@ import io.metersphere.request.LoginRequest;
|
|||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.context.i18n.LocaleContextHolder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.server.WebSession;
|
||||
|
||||
|
@ -37,8 +38,11 @@ public class UserLoginService {
|
|||
@Resource
|
||||
private ProjectMapper projectMapper;
|
||||
|
||||
public Optional<SessionUser> login(LoginRequest request, WebSession session) {
|
||||
public Optional<SessionUser> login(LoginRequest request, WebSession session, Locale locale) {
|
||||
UserDTO userDTO;
|
||||
if (locale != null) {
|
||||
LocaleContextHolder.setLocale(locale, true);
|
||||
}
|
||||
switch (request.getAuthenticate()) {
|
||||
case "OIDC":
|
||||
case "CAS":
|
||||
|
|
Loading…
Reference in New Issue