Commit dea339da authored by suntao's avatar suntao

修改登陆

parent ebb9c509
...@@ -9,22 +9,16 @@ import cn.quantgroup.cashloanflowboss.core.Application; ...@@ -9,22 +9,16 @@ import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.base.Tuple; import cn.quantgroup.cashloanflowboss.core.base.Tuple;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationDictionary; import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationDictionary;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus; import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus;
import cn.quantgroup.cashloanflowboss.utils.JSONTools;
import cn.quantgroup.cashloanflowboss.utils.MD5Tools; import cn.quantgroup.cashloanflowboss.utils.MD5Tools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import java.util.Date; import java.util.Date;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
...@@ -40,11 +34,8 @@ public class LoginServiceImpl implements LoginService { ...@@ -40,11 +34,8 @@ public class LoginServiceImpl implements LoginService {
@Autowired @Autowired
private HttpServletRequest request; private HttpServletRequest request;
@Resource(name = "redisTemplate") @Autowired
private ValueOperations<String, Principal> loginOperations; private PrincipalService principalService;
// @Resource(name = "stringRedisTemplate")
// private StringRedisTemplate stringRedisTemplate;
/** /**
* 登入 * 登入
...@@ -94,9 +85,12 @@ public class LoginServiceImpl implements LoginService { ...@@ -94,9 +85,12 @@ public class LoginServiceImpl implements LoginService {
principal.setRoles(user.getRoles()); principal.setRoles(user.getRoles());
long currentTimeMillis = System.currentTimeMillis(); long currentTimeMillis = System.currentTimeMillis();
principal.setLoginTimeMillis(currentTimeMillis); principal.setLoginTimeMillis(currentTimeMillis);
String token = UUID.randomUUID().toString(); String token = UUID.randomUUID().toString();
principalService.pushPrincipal(token, principal);
// stringRedisTemplate.opsForValue().set(principal.getUserInfo().getUsername(), token, 3, TimeUnit.HOURS); // stringRedisTemplate.opsForValue().set(principal.getUserInfo().getUsername(), token, 3, TimeUnit.HOURS);
loginOperations.set(token, principal, 3, TimeUnit.HOURS);
// session.setAttribute(ApplicationDictionary.PRINCIPAL, JSONTools.serialize(principal)); // session.setAttribute(ApplicationDictionary.PRINCIPAL, JSONTools.serialize(principal));
// session登陆时间,毫秒值 // session登陆时间,毫秒值
session.setAttribute(ApplicationDictionary.USER_SESSION_LOGIN_TIME, currentTimeMillis); session.setAttribute(ApplicationDictionary.USER_SESSION_LOGIN_TIME, currentTimeMillis);
...@@ -115,10 +109,7 @@ public class LoginServiceImpl implements LoginService { ...@@ -115,10 +109,7 @@ public class LoginServiceImpl implements LoginService {
*/ */
@Override @Override
public boolean logout() { public boolean logout() {
String bossToken = Application.getBossToken(request); principalService.removePrincipal();
if (StringUtils.isNotEmpty(bossToken)) {
loginOperations.getOperations().delete(bossToken);
}
this.request.getSession().removeAttribute(ApplicationDictionary.PRINCIPAL); this.request.getSession().removeAttribute(ApplicationDictionary.PRINCIPAL);
......
package cn.quantgroup.cashloanflowboss.api.login.service;
import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
/**
* 获取用户登陆主题信息
*
* @author tao
* @version 2020-08-19 17:22
*/
public interface PrincipalService {
Principal getPrincipal();
void pushPrincipal(String token, Principal principal);
void removePrincipal();
}
package cn.quantgroup.cashloanflowboss.api.login.service;
import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
import cn.quantgroup.cashloanflowboss.core.Application;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
* @author tao
* @version 2020-08-19 17:23
*/
@Component
public class PrincipalServiceImpl implements PrincipalService {
@Autowired
private HttpServletRequest request;
@Resource(name = "redisTemplate")
private ValueOperations<String, Principal> loginOperations;
@Override
public Principal getPrincipal() {
String bossToken = Application.getBossToken(request);
if (StringUtils.isNotEmpty(bossToken)) {
return loginOperations.get(bossToken);
}
return null;
}
@Override
public void pushPrincipal(String token, Principal principal) {
loginOperations.set(token, principal, 3, TimeUnit.HOURS);
}
@Override
public void removePrincipal() {
String bossToken = Application.getBossToken(request);
if (StringUtils.isNotEmpty(bossToken)) {
loginOperations.getOperations().delete(bossToken);
}
}
}
package cn.quantgroup.cashloanflowboss.core; package cn.quantgroup.cashloanflowboss.core;
import cn.quantgroup.cashloanflowboss.api.login.model.Principal; import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
import cn.quantgroup.cashloanflowboss.api.login.service.PrincipalService;
import cn.quantgroup.cashloanflowboss.core.constants.Constants; import cn.quantgroup.cashloanflowboss.core.constants.Constants;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationDictionary; import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationDictionary;
import cn.quantgroup.cashloanflowboss.utils.IpUtil; import cn.quantgroup.cashloanflowboss.utils.IpUtil;
import cn.quantgroup.cashloanflowboss.utils.JSONTools; import cn.quantgroup.cashloanflowboss.utils.JSONTools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEvent;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.context.ServletContextAware; import org.springframework.web.context.ServletContextAware;
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;
import javax.annotation.Resource;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
...@@ -35,11 +39,6 @@ public class Application implements ApplicationContextAware, ServletContextAware ...@@ -35,11 +39,6 @@ public class Application implements ApplicationContextAware, ServletContextAware
private static ServletContext servletContext; private static ServletContext servletContext;
/**
* 用户为key,登陆信息(最后登陆时间)
*/
private ConcurrentHashMap<String, Object> loginInfo;
public static ApplicationContext getApplicationContext() { public static ApplicationContext getApplicationContext() {
return applicationContext; return applicationContext;
...@@ -174,15 +173,18 @@ public class Application implements ApplicationContextAware, ServletContextAware ...@@ -174,15 +173,18 @@ public class Application implements ApplicationContextAware, ServletContextAware
* @return * @return
*/ */
public static Principal getPrincipal() { public static Principal getPrincipal() {
HttpSession session = getSession(); // HttpSession session = getSession();
if (Objects.nonNull(session)) { // if (Objects.nonNull(session)) {
Principal principal = JSONTools.deserialize(String.valueOf(session.getAttribute(ApplicationDictionary.PRINCIPAL)), Principal.class); // Principal principal = JSONTools.deserialize(String.valueOf(session.getAttribute(ApplicationDictionary.PRINCIPAL)), Principal.class);
// log.info("后来访问获取sessionId={},userName={}", session.getId(), principal != null ? principal.getUserInfo().getUsername() : "null"); // // log.info("后来访问获取sessionId={},userName={}", session.getId(), principal != null ? principal.getUserInfo().getUsername() : "null");
return principal; // return principal;
} else { // } else {
log.info("后来访问获取session为空"); // log.info("后来访问获取session为空");
return null; // return null;
} // }
PrincipalService principalService = Application.getBean(PrincipalService.class);
return principalService.getPrincipal();
} }
/** /**
* 获取用户主要信息 * 获取用户主要信息
...@@ -190,7 +192,6 @@ public class Application implements ApplicationContextAware, ServletContextAware ...@@ -190,7 +192,6 @@ public class Application implements ApplicationContextAware, ServletContextAware
* @return * @return
*/ */
public static HttpSession getSession() { public static HttpSession getSession() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
if (Objects.nonNull(request)) { if (Objects.nonNull(request)) {
HttpSession session = request.getSession(); HttpSession session = request.getSession();
......
...@@ -3,6 +3,7 @@ package cn.quantgroup.cashloanflowboss.core.configuration; ...@@ -3,6 +3,7 @@ package cn.quantgroup.cashloanflowboss.core.configuration;
import cn.quantgroup.cashloanflowboss.api.login.model.Principal; import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
import cn.quantgroup.cashloanflowboss.api.login.service.LoginService; import cn.quantgroup.cashloanflowboss.api.login.service.LoginService;
import cn.quantgroup.cashloanflowboss.api.login.service.LoginServiceImpl; import cn.quantgroup.cashloanflowboss.api.login.service.LoginServiceImpl;
import cn.quantgroup.cashloanflowboss.api.login.service.PrincipalService;
import cn.quantgroup.cashloanflowboss.api.role.entity.Role; import cn.quantgroup.cashloanflowboss.api.role.entity.Role;
import cn.quantgroup.cashloanflowboss.component.security.Authority; import cn.quantgroup.cashloanflowboss.component.security.Authority;
import cn.quantgroup.cashloanflowboss.component.security.SecurityHandler; import cn.quantgroup.cashloanflowboss.component.security.SecurityHandler;
...@@ -34,19 +35,18 @@ public class ApplicationSecurityHandler implements SecurityHandler { ...@@ -34,19 +35,18 @@ public class ApplicationSecurityHandler implements SecurityHandler {
@Autowired @Autowired
private LoginService loginService; private LoginService loginService;
@Autowired // @Autowired
private HttpServletRequest request; // private HttpServletRequest request;
@Resource(name = "redisTemplate") @Autowired
private ValueOperations<String, Principal> loginOperations; private PrincipalService principalService;
@Override @Override
public Tuple<Boolean, ApplicationStatus> doAuthentication(MethodInvocation invocation, String authorityId, Authority[] authority) { public Tuple<Boolean, ApplicationStatus> doAuthentication(MethodInvocation invocation, String authorityId, Authority[] authority) {
String token = Application.getBossToken(request); // Principal principal = principalService.getPrincipal();
Principal principal = loginOperations.get(token);
// Principal principal = Application.getPrincipal(); Principal principal = Application.getPrincipal();
// 检查是否已登录 // 检查是否已登录
if (principal == null) { if (principal == null) {
......
...@@ -36,7 +36,7 @@ public class CorsFilter implements Filter { ...@@ -36,7 +36,7 @@ public class CorsFilter implements Filter {
//允许请求的类型 //允许请求的类型
resp.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH"); resp.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
//允许的请求头字段 //允许的请求头字段
resp.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, cluster"); resp.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, cluster, boss-token");
//设置预检请求的有效期 //设置预检请求的有效期
//浏览器同源策略:出于安全考虑,浏览器限制跨域的http请求。怎样限制呢?通过发送两次请求:预检请求、用户请求。 //浏览器同源策略:出于安全考虑,浏览器限制跨域的http请求。怎样限制呢?通过发送两次请求:预检请求、用户请求。
//1、预检请求作用:获知服务器是否允许该跨域请求:如果允许,才发起第二次真实的请求;如果不允许,则拦截第二次请求 //1、预检请求作用:获知服务器是否允许该跨域请求:如果允许,才发起第二次真实的请求;如果不允许,则拦截第二次请求
......
...@@ -14,5 +14,5 @@ public interface Constants { ...@@ -14,5 +14,5 @@ public interface Constants {
String TOKEN = "token"; String TOKEN = "token";
String TRUE = "true"; String TRUE = "true";
String START_THIS = "#this"; String START_THIS = "#this";
String UI_HEADER_TOKEN = "boss_token"; String UI_HEADER_TOKEN = "boss-token";
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment