|  |  |  | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Value; | 
|---|
|  |  |  | import org.springframework.core.annotation.Order; | 
|---|
|  |  |  | import org.springframework.http.*; | 
|---|
|  |  |  | import org.springframework.stereotype.Component; | 
|---|
|  |  |  | import org.springframework.web.client.RestTemplate; | 
|---|
|  |  |  | import org.springframework.web.util.UriComponentsBuilder; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.lang.reflect.Method; | 
|---|
|  |  |  | import java.util.Objects; | 
|---|
|  |  |  | 
|---|
|  |  |  | @Value("${pipIrr.global.dev}") | 
|---|
|  |  |  | public String isDevStage ;//是否为开发阶段 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${pipIrr.sso.checkUrl}") | 
|---|
|  |  |  | public String ssoCheckUrl; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private RestTemplate restTemplate; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | public void setRestTemplate(RestTemplate restTemplate){ | 
|---|
|  |  |  | this.restTemplate = restTemplate ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | private SsoCheck ssoCheck ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Pointcut("@annotation(com.dy.common.aop.SsoAop)") | 
|---|
|  |  |  | public void ssoPointCut() { | 
|---|
|  |  |  | 
|---|
|  |  |  | SsoAop aop = method.getAnnotation(SsoAop.class) ; | 
|---|
|  |  |  | if (Objects.nonNull(aop)){ | 
|---|
|  |  |  | String token = UserTokenContext.get() ; | 
|---|
|  |  |  | Object rObj = this.check(token); | 
|---|
|  |  |  | Object rObj = this.ssoCheck.check(token); | 
|---|
|  |  |  | if(rObj != null){ | 
|---|
|  |  |  | if(rObj instanceof SsoVo ssoVo){ | 
|---|
|  |  |  | if(ssoVo.logined){ | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 调用SSO系统进行验证 | 
|---|
|  |  |  | * @param token Header中的用户token | 
|---|
|  |  |  | * @return 返回对象 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private Object check(String token){ | 
|---|
|  |  |  | if(!StringUtils.isNullOrEmpty(ssoCheckUrl)){ | 
|---|
|  |  |  | String url = UriComponentsBuilder.fromUriString(ssoCheckUrl) | 
|---|
|  |  |  | .queryParam("token", token) | 
|---|
|  |  |  | .build() | 
|---|
|  |  |  | .toUriString(); | 
|---|
|  |  |  | HttpHeaders headers = new HttpHeaders(); | 
|---|
|  |  |  | headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8")); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | HttpEntity<?> httpEntity = new HttpEntity<>(headers); | 
|---|
|  |  |  | ResponseEntity<SsoVo> response = null; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 通过Get方式调用接口 | 
|---|
|  |  |  | response = restTemplate.exchange(url, HttpMethod.GET, httpEntity, SsoVo.class); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | return BaseResponseUtils.buildError("后端系统出错,访问单点登录系统异常"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(response == null){ | 
|---|
|  |  |  | return BaseResponseUtils.buildError("后端系统出错,访问单点登录系统异常"); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | return response.getBody(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | return BaseResponseUtils.buildError("后端系统出错,未得到SsoCheckUrl"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|