package org.jeecg.modules.cas.controller;
|
|
import java.util.List;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
|
import org.apache.commons.lang.StringUtils;
|
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.system.util.JwtUtil;
|
import org.jeecg.common.util.RedisUtil;
|
import org.jeecg.modules.cas.util.CasServiceUtil;
|
import org.jeecg.modules.cas.util.XmlUtils;
|
import org.jeecg.modules.system.entity.SysDepart;
|
import org.jeecg.modules.system.entity.SysUser;
|
import org.jeecg.modules.system.service.ISysDepartService;
|
import org.jeecg.modules.system.service.ISysUserService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.http.HttpEntity;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
/**
|
* <p>
|
* CAS单点登录客户端登录认证
|
* </p>
|
*
|
* @Author zhoujf
|
* @since 2018-12-20
|
*/
|
@Slf4j
|
@RestController
|
@RequestMapping("/sys/cas/client")
|
public class CasClientController {
|
|
@Autowired
|
private ISysUserService sysUserService;
|
@Autowired
|
private ISysDepartService sysDepartService;
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@Value("${cas.prefixUrl}")
|
private String prefixUrl;
|
|
|
@GetMapping("/validateLogin")
|
public Object validateLogin(@RequestParam(name="ticket") String ticket,
|
@RequestParam(name="service") String service,
|
HttpServletRequest request,
|
HttpServletResponse response) throws Exception {
|
Result<JSONObject> result = new Result<JSONObject>();
|
log.info("Rest api login.");
|
try {
|
String validateUrl = prefixUrl+"/p3/serviceValidate";
|
String res = CasServiceUtil.getStValidate(validateUrl, ticket, service);
|
log.info("res."+res);
|
final String error = XmlUtils.getTextForElement(res, "authenticationFailure");
|
if(StringUtils.isNotEmpty(error)) {
|
throw new Exception(error);
|
}
|
final String principal = XmlUtils.getTextForElement(res, "user");
|
if (StringUtils.isEmpty(principal)) {
|
throw new Exception("No principal was found in the response from the CAS server.");
|
}
|
log.info("-------token----username---"+principal);
|
//1. 校验用户是否有效
|
SysUser sysUser = sysUserService.getUserByName(principal);
|
result = sysUserService.checkUserIsEffective(sysUser);
|
if(!result.isSuccess()) {
|
return result;
|
}
|
String token = JwtUtil.sign(sysUser.getUsername(), sysUser.getPassword());
|
// 设置超时时间
|
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
|
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME*2 / 1000);
|
|
//获取用户部门信息
|
JSONObject obj = new JSONObject();
|
List<SysDepart> departs = sysDepartService.queryUserDeparts(sysUser.getId());
|
obj.put("departs", departs);
|
if (departs == null || departs.size() == 0) {
|
obj.put("multi_depart", 0);
|
} else if (departs.size() == 1) {
|
sysUserService.updateUserDepart(principal, departs.get(0).getOrgCode());
|
obj.put("multi_depart", 1);
|
} else {
|
obj.put("multi_depart", 2);
|
}
|
obj.put("token", token);
|
obj.put("userInfo", sysUser);
|
result.setResult(obj);
|
result.success("登录成功");
|
|
} catch (Exception e) {
|
//e.printStackTrace();
|
result.error500(e.getMessage());
|
}
|
return new HttpEntity<>(result);
|
}
|
|
|
}
|