提交 c6e0ae50 编写于 作者: M MicLng

🐛 Fixing a bug. close #I4DENS 开放平台退出报错 健壮性处理

上级 bcf17b75
...@@ -18,14 +18,15 @@ package com.pig4cloud.pig.auth.handler; ...@@ -18,14 +18,15 @@ package com.pig4cloud.pig.auth.handler;
import com.pig4cloud.pig.admin.api.entity.SysLog; import com.pig4cloud.pig.admin.api.entity.SysLog;
import com.pig4cloud.pig.common.core.util.SpringContextHolder; import com.pig4cloud.pig.common.core.util.SpringContextHolder;
import com.pig4cloud.pig.common.core.util.WebUtils;
import com.pig4cloud.pig.common.log.event.SysLogEvent; import com.pig4cloud.pig.common.log.event.SysLogEvent;
import com.pig4cloud.pig.common.log.util.SysLogUtils; import com.pig4cloud.pig.common.log.util.SysLogUtils;
import com.pig4cloud.pig.common.security.handler.AbstractLogoutSuccessEventHandler; import com.pig4cloud.pig.common.security.handler.AbstractLogoutSuccessEventHandler;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
...@@ -46,14 +47,17 @@ public class PigLogoutSuccessEventHandler extends AbstractLogoutSuccessEventHand ...@@ -46,14 +47,17 @@ public class PigLogoutSuccessEventHandler extends AbstractLogoutSuccessEventHand
public void handle(Authentication authentication) { public void handle(Authentication authentication) {
log.info("用户:{} 退出成功", authentication.getPrincipal()); log.info("用户:{} 退出成功", authentication.getPrincipal());
SecurityContextHolder.getContext().setAuthentication(authentication); SecurityContextHolder.getContext().setAuthentication(authentication);
SysLog logVo = SysLogUtils.getSysLog(); SysLog logVo = SysLogUtils.getSysLog();
logVo.setTitle("退出成功"); logVo.setTitle("退出成功");
OAuth2AuthenticationDetails authenticationDetails = (OAuth2AuthenticationDetails) authentication.getDetails();
logVo.setParams(authenticationDetails == null ? null : authenticationDetails.getTokenValue());
// 发送异步日志事件 // 发送异步日志事件
Long startTime = System.currentTimeMillis(); Long startTime = System.currentTimeMillis();
Long endTime = System.currentTimeMillis(); Long endTime = System.currentTimeMillis();
logVo.setTime(endTime - startTime); logVo.setTime(endTime - startTime);
// 设置对应的token
WebUtils.getRequest().ifPresent(request -> logVo.setParams(request.getHeader(HttpHeaders.AUTHORIZATION)));
// 这边设置ServiceId // 这边设置ServiceId
if (authentication instanceof OAuth2Authentication) { if (authentication instanceof OAuth2Authentication) {
OAuth2Authentication auth2Authentication = (OAuth2Authentication) authentication; OAuth2Authentication auth2Authentication = (OAuth2Authentication) authentication;
......
...@@ -25,7 +25,6 @@ import lombok.extern.slf4j.Slf4j; ...@@ -25,7 +25,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
...@@ -39,6 +38,7 @@ import java.io.IOException; ...@@ -39,6 +38,7 @@ import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Optional;
/** /**
* Miscellaneous utilities for web applications. * Miscellaneous utilities for web applications.
...@@ -69,9 +69,10 @@ public class WebUtils extends org.springframework.web.util.WebUtils { ...@@ -69,9 +69,10 @@ public class WebUtils extends org.springframework.web.util.WebUtils {
* @return cookie value * @return cookie value
*/ */
public String getCookieVal(String name) { public String getCookieVal(String name) {
HttpServletRequest request = WebUtils.getRequest(); if (WebUtils.getRequest().isPresent()) {
Assert.notNull(request, "request from RequestContextHolder is null"); return getCookieVal(WebUtils.getRequest().get(), name);
return getCookieVal(request, name); }
return null;
} }
/** /**
...@@ -113,8 +114,9 @@ public class WebUtils extends org.springframework.web.util.WebUtils { ...@@ -113,8 +114,9 @@ public class WebUtils extends org.springframework.web.util.WebUtils {
* 获取 HttpServletRequest * 获取 HttpServletRequest
* @return {HttpServletRequest} * @return {HttpServletRequest}
*/ */
public HttpServletRequest getRequest() { public Optional<HttpServletRequest> getRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); return Optional
.ofNullable(((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
} }
/** /**
...@@ -158,15 +160,16 @@ public class WebUtils extends org.springframework.web.util.WebUtils { ...@@ -158,15 +160,16 @@ public class WebUtils extends org.springframework.web.util.WebUtils {
@SneakyThrows @SneakyThrows
public String getClientId(ServerHttpRequest request) { public String getClientId(ServerHttpRequest request) {
String header = request.getHeaders().getFirst(HttpHeaders.AUTHORIZATION); String header = request.getHeaders().getFirst(HttpHeaders.AUTHORIZATION);
return splitClient(header)[0]; return splitClient(header)[0];
} }
@SneakyThrows @SneakyThrows
public String getClientId(HttpServletRequest request) { public String getClientId(HttpServletRequest request) {
String header = WebUtils.getRequest().getHeader("Authorization"); if (WebUtils.getRequest().isPresent()) {
String header = WebUtils.getRequest().get().getHeader(HttpHeaders.AUTHORIZATION);
return splitClient(header)[0]; return splitClient(header)[0];
}
return null;
} }
@NotNull @NotNull
......
...@@ -22,6 +22,9 @@ public class SsoLogoutSuccessHandler implements LogoutSuccessHandler { ...@@ -22,6 +22,9 @@ public class SsoLogoutSuccessHandler implements LogoutSuccessHandler {
@Override @Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException { throws IOException {
if (response == null) {
return;
}
// 获取请求参数中是否包含 回调地址 // 获取请求参数中是否包含 回调地址
String redirectUrl = request.getParameter(REDIRECT_URL); String redirectUrl = request.getParameter(REDIRECT_URL);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册