mirror of
https://github.com/dataease/dataease.git
synced 2026-05-23 13:58:26 +08:00
Merge pull request #2439 from dataease/pr@dev@feat_fit_xpack_cas
feat: 适配xpack-cas单点登录
This commit is contained in:
@@ -38,6 +38,10 @@ public interface AuthApi {
|
||||
@PostMapping("/logout")
|
||||
String logout();
|
||||
|
||||
@ApiIgnore
|
||||
@PostMapping("/deLogout")
|
||||
String deLogout();
|
||||
|
||||
@ApiOperation("验证账号")
|
||||
@PostMapping("/validateName")
|
||||
Boolean validateName(Map<String, String> nameDto);
|
||||
@@ -50,6 +54,10 @@ public interface AuthApi {
|
||||
@PostMapping("/isOpenOidc")
|
||||
boolean isOpenOidc();
|
||||
|
||||
@ApiOperation("是否开启cas")
|
||||
@PostMapping("/isOpenCas")
|
||||
boolean isOpenCas();
|
||||
|
||||
@ApiIgnore
|
||||
@PostMapping("/isPluginLoaded")
|
||||
boolean isPluginLoaded();
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package io.dataease.auth.config.cas;
|
||||
|
||||
import io.dataease.auth.service.impl.ShiroServiceImpl;
|
||||
import io.dataease.commons.utils.CommonBeanFactory;
|
||||
import io.dataease.service.system.SystemParameterService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.util.AntPathMatcher;
|
||||
import org.jasig.cas.client.authentication.UrlPatternMatcherStrategy;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@Component
|
||||
public class CasStrategy implements UrlPatternMatcherStrategy {
|
||||
|
||||
|
||||
private static Set<String> releaseTypes = new HashSet<>();
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
releaseTypes.add("anon");
|
||||
releaseTypes.add("link");
|
||||
releaseTypes.add("doc");
|
||||
}
|
||||
@Override
|
||||
public boolean matches(String s) {
|
||||
SystemParameterService service = CommonBeanFactory.getBean(SystemParameterService.class);
|
||||
String serviceValue = service.getValue("cas.callBack");
|
||||
if (StringUtils.isBlank(serviceValue)) return false;
|
||||
String serverName = serviceValue.substring(0, serviceValue.indexOf("/cas/callBack"));
|
||||
int beginIndex = -1;
|
||||
if ((beginIndex = s.indexOf(serverName)) != -1) {
|
||||
s = s.substring(beginIndex + serverName.length());
|
||||
}
|
||||
if (StringUtils.equals("/", s)) return false;
|
||||
if (StringUtils.equals("/login", s)) return false;
|
||||
if (StringUtils.startsWith(s, "/cas/callBack")) return false;
|
||||
if (StringUtils.equals("/api/auth/deLogout", s)) return true;
|
||||
AntPathMatcher antPathMatcher = new AntPathMatcher();
|
||||
ShiroServiceImpl shiroService = CommonBeanFactory.getBean(ShiroServiceImpl.class);
|
||||
Map<String, String> stringStringMap = shiroService.loadFilterChainDefinitionMap();
|
||||
for (Map.Entry<String, String> entry : stringStringMap.entrySet()) {
|
||||
if (releaseTypes.contains(entry.getValue())) {
|
||||
boolean matches = antPathMatcher.matches(entry.getKey(), s);
|
||||
if (matches) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPattern(String s) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -17,12 +17,14 @@ import io.dataease.i18n.Translator;
|
||||
import io.dataease.plugins.common.entity.XpackLdapUserEntity;
|
||||
import io.dataease.plugins.config.SpringContextUtil;
|
||||
import io.dataease.plugins.util.PluginUtils;
|
||||
import io.dataease.plugins.xpack.cas.service.CasXpackService;
|
||||
import io.dataease.plugins.xpack.ldap.dto.request.LdapValidateRequest;
|
||||
import io.dataease.plugins.xpack.ldap.dto.response.ValidateResult;
|
||||
import io.dataease.plugins.xpack.ldap.service.LdapXpackService;
|
||||
import io.dataease.plugins.xpack.oidc.service.OidcXpackService;
|
||||
import io.dataease.service.sys.SysUserService;
|
||||
|
||||
import io.dataease.service.system.SystemParameterService;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
@@ -36,7 +38,9 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
@RestController
|
||||
public class AuthServer implements AuthApi {
|
||||
@@ -50,6 +54,9 @@ public class AuthServer implements AuthApi {
|
||||
@Autowired
|
||||
private SysUserService sysUserService;
|
||||
|
||||
@Resource
|
||||
private SystemParameterService systemParameterService;
|
||||
|
||||
@Override
|
||||
public Object login(@RequestBody LoginDto loginDto) throws Exception {
|
||||
String username = RsaUtil.decryptByPrivateKey(RsaProperties.privateKey, loginDto.getUsername());
|
||||
@@ -159,6 +166,37 @@ public class AuthServer implements AuthApi {
|
||||
return DEFAULT_PWD;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String deLogout() {
|
||||
String token = ServletUtils.getToken();
|
||||
if (StringUtils.isEmpty(token) || StringUtils.equals("null", token) || StringUtils.equals("undefined", token)) {
|
||||
return "success";
|
||||
}
|
||||
SecurityUtils.getSubject().logout();
|
||||
String result = null;
|
||||
Integer defaultLoginType = systemParameterService.defaultLoginType();
|
||||
if (defaultLoginType == 3 && isOpenCas()) {
|
||||
HttpServletRequest request = ServletUtils.request();
|
||||
HttpSession session = request.getSession();
|
||||
session.invalidate();
|
||||
CasXpackService casXpackService = SpringContextUtil.getBean(CasXpackService.class);
|
||||
result = casXpackService.logout();
|
||||
}
|
||||
try {
|
||||
Long userId = JWTUtils.tokenInfoByToken(token).getUserId();
|
||||
authUserService.clearCache(userId);
|
||||
if (StringUtils.isBlank(result)) {
|
||||
result = "success";
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LogUtil.error(e);
|
||||
if (StringUtils.isBlank(result)) {
|
||||
result = "fail";
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String logout() {
|
||||
String token = ServletUtils.getToken();
|
||||
@@ -170,20 +208,36 @@ public class AuthServer implements AuthApi {
|
||||
OidcXpackService oidcXpackService = SpringContextUtil.getBean(OidcXpackService.class);
|
||||
oidcXpackService.logout(idToken);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(token) || StringUtils.equals("null", token) || StringUtils.equals("undefined", token)) {
|
||||
return "success";
|
||||
}
|
||||
|
||||
SecurityUtils.getSubject().logout();
|
||||
String result = null;
|
||||
Integer defaultLoginType = systemParameterService.defaultLoginType();
|
||||
if (defaultLoginType == 3 && isOpenCas()) {
|
||||
HttpServletRequest request = ServletUtils.request();
|
||||
HttpSession session = request.getSession();
|
||||
session.invalidate();
|
||||
CasXpackService casXpackService = SpringContextUtil.getBean(CasXpackService.class);
|
||||
result = casXpackService.logout();
|
||||
}
|
||||
try {
|
||||
Long userId = JWTUtils.tokenInfoByToken(token).getUserId();
|
||||
|
||||
authUserService.clearCache(userId);
|
||||
if (StringUtils.isBlank(result)) {
|
||||
result = "success";
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LogUtil.error(e);
|
||||
return "fail";
|
||||
if (StringUtils.isBlank(result)) {
|
||||
result = "fail";
|
||||
}
|
||||
}
|
||||
|
||||
return "success";
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -211,6 +265,17 @@ public class AuthServer implements AuthApi {
|
||||
return authUserService.supportOidc();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isOpenCas() {
|
||||
Boolean licValid = PluginUtils.licValid();
|
||||
if (!licValid)
|
||||
return false;
|
||||
Boolean supportCas = authUserService.supportCas();
|
||||
|
||||
return authUserService.supportCas();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPluginLoaded() {
|
||||
Boolean licValid = PluginUtils.licValid();
|
||||
|
||||
@@ -14,6 +14,8 @@ public interface AuthUserService {
|
||||
|
||||
SysUserEntity getLdapUserByName(String username);
|
||||
|
||||
SysUserEntity getCasUserByName(String username);
|
||||
|
||||
SysUserEntity getUserBySub(String sub);
|
||||
|
||||
List<String> roles(Long userId);
|
||||
@@ -28,6 +30,8 @@ public interface AuthUserService {
|
||||
|
||||
Boolean supportOidc();
|
||||
|
||||
Boolean supportCas();
|
||||
|
||||
Boolean pluginLoaded();
|
||||
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import io.dataease.plugins.common.base.domain.SysUser;
|
||||
import io.dataease.plugins.common.base.mapper.SysUserMapper;
|
||||
import io.dataease.plugins.common.service.PluginCommonService;
|
||||
import io.dataease.plugins.config.SpringContextUtil;
|
||||
import io.dataease.plugins.xpack.cas.service.CasXpackService;
|
||||
import io.dataease.plugins.xpack.ldap.service.LdapXpackService;
|
||||
import io.dataease.plugins.xpack.oidc.service.OidcXpackService;
|
||||
|
||||
@@ -65,6 +66,11 @@ public class AuthUserServiceImpl implements AuthUserService {
|
||||
return authMapper.findLdapUserByName(username);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysUserEntity getCasUserByName(String username) {
|
||||
return authMapper.findCasUserByName(username);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysUserEntity getUserBySub(String sub) {
|
||||
return authMapper.findUserBySub(sub);
|
||||
@@ -147,6 +153,15 @@ public class AuthUserServiceImpl implements AuthUserService {
|
||||
return oidcXpackService.isSuuportOIDC();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean supportCas() {
|
||||
Map<String, CasXpackService> beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((CasXpackService.class));
|
||||
if (beansOfType.keySet().size() == 0) return false;
|
||||
CasXpackService casXpackService = SpringContextUtil.getBean(CasXpackService.class);
|
||||
if (ObjectUtils.isEmpty(casXpackService)) return false;
|
||||
return casXpackService.suuportCas();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean pluginLoaded() {
|
||||
Map<String, PluginCommonService> beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((PluginCommonService.class));
|
||||
|
||||
@@ -84,6 +84,8 @@ public class ShiroServiceImpl implements ShiroService {
|
||||
filterChainDefinitionMap.put("/api/pluginCommon/staticInfo/**", ANON);
|
||||
filterChainDefinitionMap.put("/plugin/oidc/authInfo", ANON);
|
||||
filterChainDefinitionMap.put("/sso/callBack*", ANON);
|
||||
filterChainDefinitionMap.put("/cas/callBack*", ANON);
|
||||
filterChainDefinitionMap.put("/cas/reset", ANON);
|
||||
|
||||
filterChainDefinitionMap.put("/unauth", ANON);
|
||||
filterChainDefinitionMap.put("/display/**", ANON);
|
||||
@@ -91,7 +93,6 @@ public class ShiroServiceImpl implements ShiroService {
|
||||
filterChainDefinitionMap.put("/downline", ANON);
|
||||
filterChainDefinitionMap.put("/common-files/**", ANON);
|
||||
filterChainDefinitionMap.put("/linkage/getPanelAllLinkageInfo/**", ANON);
|
||||
filterChainDefinitionMap.put("/api/auth/logout", "logout");
|
||||
|
||||
filterChainDefinitionMap.put("/api/link/resourceDetail/**", "link");
|
||||
filterChainDefinitionMap.put("/api/link/viewDetail/**", "link");
|
||||
|
||||
@@ -3,7 +3,10 @@ package io.dataease.commons.filter;
|
||||
import io.dataease.commons.exception.DEException;
|
||||
import io.dataease.commons.holder.ThreadLocalContextHolder;
|
||||
import io.dataease.commons.wrapper.XssAndSqlHttpServletRequestWrapper;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@@ -20,7 +23,10 @@ public class SqlFilter implements Filter {
|
||||
|
||||
@Override
|
||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
|
||||
|
||||
if (ObjectUtils.isEmpty(RequestContextHolder.getRequestAttributes())) {
|
||||
ServletRequestAttributes attributes = new ServletRequestAttributes((HttpServletRequest) request);
|
||||
RequestContextHolder.setRequestAttributes(attributes);
|
||||
}
|
||||
HttpServletRequest httpRequest = (HttpServletRequest) request;
|
||||
HttpServletResponse httpResponse = (HttpServletResponse) response;
|
||||
if ("TRACE".equalsIgnoreCase(httpRequest.getMethod()) || "TRACK".equalsIgnoreCase(httpRequest.getMethod())) {
|
||||
|
||||
@@ -7,6 +7,7 @@ import io.dataease.controller.sys.response.MailInfo;
|
||||
import io.dataease.dto.SystemParameterDTO;
|
||||
import io.dataease.listener.DatasetCheckListener;
|
||||
import io.dataease.listener.util.CacheUtils;
|
||||
import io.dataease.plugins.xpack.cas.dto.CasSaveResult;
|
||||
import io.dataease.service.FileService;
|
||||
import io.dataease.service.system.EmailService;
|
||||
import io.dataease.service.system.SystemParameterService;
|
||||
@@ -66,14 +67,14 @@ public class SystemParameterController {
|
||||
|
||||
@RequiresPermissions("sysparam:read")
|
||||
@PostMapping("/edit/basic")
|
||||
public void editBasic(@RequestBody List<SystemParameter> systemParameter) {
|
||||
public CasSaveResult editBasic(@RequestBody List<SystemParameter> systemParameter) {
|
||||
int timeout = Integer.parseInt(systemParameter.stream().filter(
|
||||
parameter -> parameter.getParamKey().equals("basic.frontTimeOut")
|
||||
).findFirst().get().getParamValue());
|
||||
if (timeout < 0 || timeout > 300) { //增加了合法性检验
|
||||
throw new NumberFormatException("Timeout Range Error!");
|
||||
}
|
||||
systemParameterService.editBasic(systemParameter);
|
||||
return systemParameterService.editBasic(systemParameter);
|
||||
}
|
||||
|
||||
@PostMapping("/testConnection")
|
||||
|
||||
@@ -27,6 +27,8 @@ public interface AuthMapper {
|
||||
|
||||
SysUserEntity findLdapUserByName(@Param("username") String username);
|
||||
|
||||
SysUserEntity findCasUserByName(@Param("username") String username);
|
||||
|
||||
SysUserEntity findUserBySub(@Param("sub") String sub);
|
||||
|
||||
|
||||
|
||||
@@ -49,6 +49,11 @@
|
||||
select user_id, username,nick_name, dept_id, password, enabled,email, phone, language ,is_admin, `from` from sys_user a where username = #{username} and a.from = 1
|
||||
</select>
|
||||
|
||||
|
||||
<select id="findCasUserByName" resultMap="baseMap">
|
||||
select user_id, username,nick_name, dept_id, password, enabled,email, phone, language ,is_admin, `from` from sys_user a where username = #{username} and a.from = 3
|
||||
</select>
|
||||
|
||||
<select id="findUserBySub" resultMap="baseMap">
|
||||
select user_id, username,nick_name, dept_id, password, enabled,email, phone, language ,is_admin, `from` from sys_user where sub = #{sub}
|
||||
</select>
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package io.dataease.listener;
|
||||
|
||||
import io.dataease.plugins.config.SpringContextUtil;
|
||||
import io.dataease.plugins.xpack.cas.service.CasXpackService;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class CasStatusListener implements ApplicationListener<ApplicationReadyEvent> {
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onApplicationEvent(ApplicationReadyEvent event) {
|
||||
Map<String, CasXpackService> beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((CasXpackService.class));
|
||||
if (beansOfType.keySet().size() == 0) return;
|
||||
CasXpackService casXpackService = SpringContextUtil.getBean(CasXpackService.class);
|
||||
if (ObjectUtils.isEmpty(casXpackService)) return;
|
||||
ServletContext servletContext = event.getApplicationContext().getBean(ServletContext.class);
|
||||
casXpackService.checkCasStatus(servletContext);
|
||||
}
|
||||
}
|
||||
103
backend/src/main/java/io/dataease/plugins/server/CasServer.java
Normal file
103
backend/src/main/java/io/dataease/plugins/server/CasServer.java
Normal file
@@ -0,0 +1,103 @@
|
||||
package io.dataease.plugins.server;
|
||||
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import io.dataease.auth.entity.SysUserEntity;
|
||||
import io.dataease.auth.entity.TokenInfo;
|
||||
import io.dataease.auth.service.AuthUserService;
|
||||
import io.dataease.auth.util.JWTUtils;
|
||||
import io.dataease.commons.utils.CodingUtil;
|
||||
import io.dataease.commons.utils.LogUtil;
|
||||
import io.dataease.commons.utils.ServletUtils;
|
||||
|
||||
import io.dataease.service.sys.SysUserService;
|
||||
import io.dataease.service.system.SystemParameterService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jasig.cas.client.authentication.AttributePrincipal;
|
||||
import org.jasig.cas.client.util.AssertionHolder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
@ApiIgnore
|
||||
@RequestMapping("/cas")
|
||||
@Controller
|
||||
public class CasServer {
|
||||
|
||||
@Autowired
|
||||
private AuthUserService authUserService;
|
||||
|
||||
@Autowired
|
||||
private SysUserService sysUserService;
|
||||
|
||||
@Resource
|
||||
private SystemParameterService systemParameterService;
|
||||
|
||||
@GetMapping("/callBack")
|
||||
public ModelAndView callBack() {
|
||||
ModelAndView modelAndView = new ModelAndView("redirect:/");
|
||||
HttpServletResponse response = ServletUtils.response();
|
||||
|
||||
AttributePrincipal principal = AssertionHolder.getAssertion().getPrincipal();
|
||||
String name = principal.getName();
|
||||
try {
|
||||
SysUserEntity sysUserEntity = authUserService.getCasUserByName(name);
|
||||
if(null == sysUserEntity){
|
||||
String s = RandomUtil.randomString(6);
|
||||
String email = s + "@xxx.com";
|
||||
sysUserService.validateCasUser(name);
|
||||
sysUserService.saveCASUser(name, email);
|
||||
sysUserEntity = authUserService.getUserByName(name);
|
||||
}
|
||||
String realPwd = CodingUtil.md5(sysUserService.defaultPWD());
|
||||
TokenInfo tokenInfo = TokenInfo.builder().userId(sysUserEntity.getUserId()).username(sysUserEntity.getUsername()).build();
|
||||
String token = JWTUtils.sign(tokenInfo, realPwd);
|
||||
ServletUtils.setToken(token);
|
||||
Cookie cookie_token = new Cookie("Authorization", token);cookie_token.setPath("/");
|
||||
response.addCookie(cookie_token);
|
||||
|
||||
}catch(Exception e) {
|
||||
|
||||
String msg = e.getMessage();
|
||||
if (null != e.getCause()) {
|
||||
msg = e.getCause().getMessage();
|
||||
}
|
||||
try {
|
||||
msg = URLEncoder.encode(msg, "UTF-8");
|
||||
LogUtil.error(e);
|
||||
Cookie cookie_error = new Cookie("CasError", msg);
|
||||
cookie_error.setPath("/");
|
||||
response.addCookie(cookie_error);
|
||||
|
||||
return modelAndView;
|
||||
} catch (UnsupportedEncodingException e1) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
@GetMapping("/reset")
|
||||
@ResponseBody
|
||||
public String reset() {
|
||||
systemParameterService.resetCas();
|
||||
String token = ServletUtils.getToken();
|
||||
if (StringUtils.isNotBlank(token)) {
|
||||
Long userId = JWTUtils.tokenInfoByToken(token).getUserId();
|
||||
authUserService.clearCache(userId);
|
||||
}
|
||||
HttpServletRequest request = ServletUtils.request();
|
||||
request.getSession().invalidate();
|
||||
return "已经切换默认登录方式";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package io.dataease.plugins.server;
|
||||
|
||||
|
||||
import io.dataease.plugins.config.SpringContextUtil;
|
||||
import io.dataease.plugins.xpack.cas.dto.CasSaveResult;
|
||||
import io.dataease.plugins.xpack.cas.service.CasXpackService;
|
||||
import io.dataease.plugins.xpack.display.dto.response.SysSettingDto;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ApiIgnore
|
||||
@RequestMapping("/plugin/cas")
|
||||
@RestController
|
||||
public class XCasServer {
|
||||
|
||||
|
||||
@PostMapping("/info")
|
||||
public List<SysSettingDto> getOidcInfo() {
|
||||
CasXpackService casXpackService = SpringContextUtil.getBean(CasXpackService.class);
|
||||
return casXpackService.casSettings();
|
||||
}
|
||||
|
||||
@RequiresPermissions("sysparam:read")
|
||||
@PostMapping("/save")
|
||||
public CasSaveResult save(@RequestBody List<SysSettingDto> settings) {
|
||||
CasXpackService casXpackService = SpringContextUtil.getBean(CasXpackService.class);
|
||||
return casXpackService.save(settings);
|
||||
}
|
||||
}
|
||||
@@ -124,6 +124,31 @@ public class SysUserService {
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void saveCASUser(String name, String email) {
|
||||
long now = System.currentTimeMillis();
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser.setUsername(name);
|
||||
sysUser.setNickName(name);
|
||||
sysUser.setEmail(email);
|
||||
sysUser.setPassword(CodingUtil.md5(DEFAULT_PWD));
|
||||
sysUser.setCreateTime(now);
|
||||
sysUser.setUpdateTime(now);
|
||||
sysUser.setEnabled(1L);
|
||||
sysUser.setLanguage("zh_CN");
|
||||
sysUser.setFrom(3);
|
||||
sysUser.setIsAdmin(false);
|
||||
// sysUser.setSub(ssoUserInfo.getSub());
|
||||
sysUserMapper.insert(sysUser);
|
||||
SysUser dbUser = findOne(sysUser);
|
||||
if (null != dbUser && null != dbUser.getUserId()) {
|
||||
// oidc默认角色是普通员工
|
||||
List<Long> roleIds = new ArrayList<Long>();
|
||||
roleIds.add(2L);
|
||||
saveUserRoles( dbUser.getUserId(), roleIds);
|
||||
}
|
||||
}
|
||||
|
||||
public String defaultPWD() {
|
||||
return DEFAULT_PWD;
|
||||
}
|
||||
@@ -323,6 +348,14 @@ public class SysUserService {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void validateCasUser(String userName) {
|
||||
SysUserExample example = new SysUserExample();
|
||||
example.createCriteria().andUsernameEqualTo(userName);
|
||||
List<SysUser> users = sysUserMapper.selectByExample(example);
|
||||
if(CollectionUtils.isNotEmpty(users)) {
|
||||
throw new RuntimeException("用户ID【"+userName+"】已存在,请联系管理员");
|
||||
}
|
||||
}
|
||||
public void validateExistUser(String userName, String nickName, String email) {
|
||||
SysUserExample example = new SysUserExample();
|
||||
if (StringUtils.isNotBlank(userName)) {
|
||||
|
||||
@@ -10,8 +10,12 @@ import io.dataease.plugins.common.base.domain.FileMetadata;
|
||||
import io.dataease.plugins.common.base.domain.SystemParameter;
|
||||
import io.dataease.plugins.common.base.domain.SystemParameterExample;
|
||||
import io.dataease.plugins.common.base.mapper.SystemParameterMapper;
|
||||
import io.dataease.plugins.config.SpringContextUtil;
|
||||
import io.dataease.plugins.xpack.cas.dto.CasSaveResult;
|
||||
import io.dataease.plugins.xpack.cas.service.CasXpackService;
|
||||
import io.dataease.service.FileService;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -22,6 +26,8 @@ import javax.imageio.ImageIO;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import io.dataease.ext.*;
|
||||
|
||||
@Service
|
||||
@@ -29,6 +35,7 @@ import io.dataease.ext.*;
|
||||
public class SystemParameterService {
|
||||
|
||||
private final static String LOGIN_TYPE_KEY = "basic.loginType";
|
||||
private final static String CAS_LOGIN_TYPE = "3";
|
||||
@Resource
|
||||
private SystemParameterMapper systemParameterMapper;
|
||||
@Resource
|
||||
@@ -81,8 +88,11 @@ public class SystemParameterService {
|
||||
return result;
|
||||
}
|
||||
|
||||
public void editBasic(List<SystemParameter> parameters) {
|
||||
parameters.forEach(parameter -> {
|
||||
@Transactional
|
||||
public CasSaveResult editBasic(List<SystemParameter> parameters) {
|
||||
CasSaveResult casSaveResult = afterSwitchDefaultLogin(parameters);
|
||||
for (int i = 0; i < parameters.size(); i++) {
|
||||
SystemParameter parameter = parameters.get(i);
|
||||
SystemParameterExample example = new SystemParameterExample();
|
||||
|
||||
example.createCriteria().andParamKeyEqualTo(parameter.getParamKey());
|
||||
@@ -92,8 +102,65 @@ public class SystemParameterService {
|
||||
systemParameterMapper.insert(parameter);
|
||||
}
|
||||
example.clear();
|
||||
}
|
||||
return casSaveResult;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void resetCas() {
|
||||
Map<String, CasXpackService> beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((CasXpackService.class));
|
||||
if (beansOfType.keySet().size() == 0) DEException.throwException("当前未启用CAS");
|
||||
CasXpackService casXpackService = SpringContextUtil.getBean(CasXpackService.class);
|
||||
if (ObjectUtils.isEmpty(casXpackService)) DEException.throwException("当前未启用CAS");
|
||||
|
||||
String loginTypePk = "basic.loginType";
|
||||
SystemParameter loginTypeParameter = systemParameterMapper.selectByPrimaryKey(loginTypePk);
|
||||
if (ObjectUtils.isNotEmpty(loginTypeParameter) && StringUtils.equals("3", loginTypeParameter.getParamValue())) {
|
||||
loginTypeParameter.setParamValue("0");
|
||||
systemParameterMapper.updateByPrimaryKeySelective(loginTypeParameter);
|
||||
}
|
||||
casXpackService.setEnabled(false);
|
||||
}
|
||||
|
||||
public CasSaveResult afterSwitchDefaultLogin(List<SystemParameter> parameters) {
|
||||
CasSaveResult casSaveResult = new CasSaveResult();
|
||||
casSaveResult.setNeedLogout(false);
|
||||
Map<String, CasXpackService> beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((CasXpackService.class));
|
||||
if (beansOfType.keySet().size() == 0) return casSaveResult;
|
||||
CasXpackService casXpackService = SpringContextUtil.getBean(CasXpackService.class);
|
||||
if (ObjectUtils.isEmpty(casXpackService)) return casSaveResult;
|
||||
|
||||
AtomicReference<String> loginType = new AtomicReference();
|
||||
boolean containLoginType = parameters.stream().anyMatch(param -> {
|
||||
if (StringUtils.equals(param.getParamKey(), LOGIN_TYPE_KEY)) {
|
||||
loginType.set(param.getParamValue());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (!containLoginType) return casSaveResult;
|
||||
|
||||
|
||||
SystemParameter systemParameter = systemParameterMapper.selectByPrimaryKey(LOGIN_TYPE_KEY);
|
||||
String originVal = null;
|
||||
if (ObjectUtils.isNotEmpty(systemParameter)) {
|
||||
originVal = systemParameter.getParamValue();
|
||||
}
|
||||
|
||||
if (StringUtils.equals(originVal, loginType.get())) return casSaveResult;
|
||||
|
||||
if (StringUtils.equals(CAS_LOGIN_TYPE, loginType.get())) {
|
||||
casSaveResult.setNeedLogout(true);
|
||||
casXpackService.setEnabled(true);
|
||||
casSaveResult.setCasEnable(true);
|
||||
}
|
||||
|
||||
if (StringUtils.equals(CAS_LOGIN_TYPE, originVal)) {
|
||||
casSaveResult.setNeedLogout(true);
|
||||
casXpackService.setEnabled(false);
|
||||
casSaveResult.setCasEnable(false);
|
||||
}
|
||||
return casSaveResult;
|
||||
}
|
||||
|
||||
public List<SystemParameter> getParamList(String type) {
|
||||
@@ -102,6 +169,8 @@ public class SystemParameterService {
|
||||
return systemParameterMapper.selectByExample(example);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public String getVersion() {
|
||||
return System.getenv("MS_VERSION");
|
||||
}
|
||||
|
||||
@@ -114,6 +114,13 @@ server.compression.min-response-size=1024
|
||||
|
||||
|
||||
|
||||
server.servlet.context-parameters.configurationStrategy=SYSTEM_PROPERTIES
|
||||
server.servlet.session.cookie.http-only=true
|
||||
server.servlet.session.tracking-modes=cookie
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user