【单点登录】支持配置文件是否启用单点逻辑
This commit is contained in:
parent
3555b6ca05
commit
a64bdb60ce
|
@ -20,6 +20,7 @@ import org.apache.shiro.authc.AuthenticationException;
|
||||||
import org.apache.shiro.authc.AuthenticationToken;
|
import org.apache.shiro.authc.AuthenticationToken;
|
||||||
import org.apache.shiro.web.filter.authc.AuthenticatingFilter;
|
import org.apache.shiro.web.filter.authc.AuthenticatingFilter;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@ -30,6 +31,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.net.URL;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -49,6 +51,9 @@ public class Oauth2Filter extends AuthenticatingFilter {
|
||||||
@Autowired
|
@Autowired
|
||||||
private SysUserDao sysUserDao;
|
private SysUserDao sysUserDao;
|
||||||
|
|
||||||
|
@Value("${yawei.enable}")
|
||||||
|
private Boolean yaweiEnable;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception {
|
protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception {
|
||||||
//获取请求token
|
//获取请求token
|
||||||
|
@ -88,51 +93,14 @@ public class Oauth2Filter extends AuthenticatingFilter {
|
||||||
@Override
|
@Override
|
||||||
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
|
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
|
||||||
|
|
||||||
boolean yaweiHandle = yaweiHandle((HttpServletRequest) request, (HttpServletResponse) response);
|
if (yaweiEnable) {
|
||||||
if (yaweiHandle) {
|
return yaweiHandle((HttpServletRequest) request, (HttpServletResponse) response);
|
||||||
//处理成功肯定从cookie或写cookie拿到了认证信息
|
}else {
|
||||||
//亚威认证通过,为自己添加上token
|
String requesturi = ((HttpServletRequest) request).getHeader("REQUESTURI");
|
||||||
TicketManager tm = new TicketManager();
|
|
||||||
String currentUser = null;
|
|
||||||
if (tm.LoadTicket((HttpServletRequest) request)) {
|
|
||||||
currentUser = tm.getUserID();
|
|
||||||
} else {
|
|
||||||
currentUser = getYaweiUserIdCookieInResponse((HttpServletResponse) response);
|
|
||||||
currentUser = tm.DecData(currentUser);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentUser != null) {
|
((HttpServletResponse)response).addHeader("REDIRECT", "/#/login");
|
||||||
LambdaQueryWrapper<SysUserEntity> queryWrapper = new QueryWrapper<SysUserEntity>().lambda()
|
|
||||||
.eq(SysUserEntity::getUsername, currentUser);
|
|
||||||
SysUserEntity sysUserEntity = sysUserDao.selectOne(queryWrapper);
|
|
||||||
if (sysUserEntity != null) {
|
|
||||||
String currentToken = getRequestToken((HttpServletRequest) request);
|
|
||||||
HttpServletResponse httpresponse = (HttpServletResponse) response;
|
|
||||||
if (StringUtils.isBlank(currentToken)) {
|
|
||||||
Result<Map> result = sysUserTokenService.createToken(sysUserEntity.getId());
|
|
||||||
Object token = result.getData().get(Constant.TOKEN_HEADER);
|
|
||||||
currentToken = (String) token;
|
|
||||||
Cookie cookie = new Cookie(Constant.TOKEN_HEADER, currentToken);
|
|
||||||
cookie.setPath("/");
|
|
||||||
httpresponse.addCookie(cookie);
|
|
||||||
httpresponse.addHeader(Constant.TOKEN_HEADER, currentToken);
|
|
||||||
httpresponse.addHeader("REDIRECT", ((HttpServletRequest) request).getHeader("REQUESTURI"));
|
|
||||||
}
|
|
||||||
|
|
||||||
request.setAttribute(Constant.TOKEN_HEADER, currentToken);
|
|
||||||
// return executeLogin(request, response);
|
|
||||||
boolean success = executeLogin(request, response);
|
|
||||||
return success;
|
|
||||||
} else {
|
|
||||||
send401Error((HttpServletResponse) response, "未找到用户");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
send401Error((HttpServletResponse) response, "登录失败");
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,13 +205,38 @@ public class Oauth2Filter extends AuthenticatingFilter {
|
||||||
redirectToYaweiLogin(request, response);
|
redirectToYaweiLogin(request, response);
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
// String domainName = yaweiSSOProperties.getDomain();
|
//认证通过
|
||||||
// tm.SaveTicket(response, domainName);
|
LambdaQueryWrapper<SysUserEntity> queryWrapper = new QueryWrapper<SysUserEntity>().lambda()
|
||||||
YaWeiCookieManage.saveTicket(response, tm);
|
.eq(SysUserEntity::getUsername, tm.getUserID());
|
||||||
return true;
|
SysUserEntity sysUserEntity = sysUserDao.selectOne(queryWrapper);
|
||||||
|
if (sysUserEntity != null) {
|
||||||
|
String currentToken = getRequestToken((HttpServletRequest) request);
|
||||||
|
HttpServletResponse httpresponse = (HttpServletResponse) response;
|
||||||
|
if (StringUtils.isBlank(currentToken)) {
|
||||||
|
Result<Map> result = sysUserTokenService.createToken(sysUserEntity.getId());
|
||||||
|
Object token = result.getData().get(Constant.TOKEN_HEADER);
|
||||||
|
currentToken = (String) token;
|
||||||
|
Cookie cookie = new Cookie(Constant.TOKEN_HEADER, currentToken);
|
||||||
|
cookie.setPath("/");
|
||||||
|
httpresponse.addCookie(cookie);
|
||||||
|
httpresponse.addHeader(Constant.TOKEN_HEADER, currentToken);
|
||||||
|
|
||||||
|
String yaweiToken = yaweiSSOProperties.getSsoKey() + "=" + strResponse;
|
||||||
|
if (requestUri.indexOf(yaweiToken) > 0) {
|
||||||
|
requestUri = requestUri.replace(yaweiToken, "");
|
||||||
|
if (requestUri.endsWith("?")) {
|
||||||
|
requestUri = requestUri.substring(0,requestUri.length() -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
httpresponse.addHeader("REDIRECT", requestUri);
|
||||||
|
}
|
||||||
|
|
||||||
|
request.setAttribute(Constant.TOKEN_HEADER, currentToken);
|
||||||
|
return executeLogin(request, response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void redirectToYaweiLogin(HttpServletRequest request, HttpServletResponse response) throws IOException, IllegalAccessException, NoSuchFieldException {
|
private void redirectToYaweiLogin(HttpServletRequest request, HttpServletResponse response) throws IOException, IllegalAccessException, NoSuchFieldException {
|
||||||
|
|
|
@ -84,3 +84,6 @@ mybatis-plus:
|
||||||
#系统上线日期,用于统计能力浏览记录
|
#系统上线日期,用于统计能力浏览记录
|
||||||
system:
|
system:
|
||||||
startDay: 2022-04-01
|
startDay: 2022-04-01
|
||||||
|
|
||||||
|
yawei:
|
||||||
|
enable: true
|
Loading…
Reference in New Issue