用切面来做日志记录器

@Aspect
@Component
@Slf4j
public class UserLoginLogAspect {

    @Autowired
    UserLoginLogMapper userLoginLogMapper;

    @Resource(name = "basicRedisTemplate")
    RedisTemplate redisTemplate;

    @Autowired
    SiteInformationMapper siteInformationMapper;

    @Pointcut("execution(* com.zemcho.cms.controller.site.SiteController.switchSite(..))")
    public void userPointCut() {

    }

    @After("(userPointCut()) && args(response,token,params,..)")
    public void writeLoginLog(HttpServletResponse response, String token, SwitchParams params) {

        System.out.println("token = " + token);
        System.out.println("params" + params);

        String siteId = params.getSiteId();
        SiteInformation siteInformation = siteInformationMapper.selectBySiteId(siteId);


        String redisToken = "token:" + token;
        LoginInformation loginInformation = (LoginInformation) redisTemplate.opsForValue().get(redisToken);

        if (siteInformation != null && loginInformation != null) {

            UserLoginLog entity = new UserLoginLog();

            entity.setUserId(loginInformation.getUserId());
            entity.setSiteId(siteId);
            entity.setNickname(loginInformation.getUserName());
            entity.setLoginSiteName(siteInformation.getSiteName());
            entity.setLoginTime(LocalDateTime.now());

            String ip = loginInformation.getIp();
            System.out.println("requestIp" + ip);
            entity.setLoginIp(ip);

            userLoginLogMapper.insertUserLoginLog(entity);
        }

        log.info("用户登陆,记录登陆日志");
    }

    public static String getRequestIp(HttpServletRequest request) {

        //如果XFF不为空,拿XFF的左边第一个
        String ip = request.getHeader("X-Forwarded-For");
        if (ip != null && !"unKnown".equalsIgnoreCase(ip)) {
            //多次反向代理后会有多个ip值,第一个ip才是真实ip
            int index = ip.indexOf(",");
            if (index != -1) {
                return ip.substring(0, index);
            } else {
                return ip;
            }
        }

        //如果XFF为空,拿XRI
        ip = request.getHeader("X-Real-IP");
        if (ip != null && !"unKnown".equalsIgnoreCase(ip)) {
            return ip;
        }

        //如果XRI为空,只能拿request.getRemoteAddr(),也就是只能拿到最直接发给他的机器ip了
        return request.getRemoteAddr();
    }

}
  @PostMapping("/switch")
    public Result switchSite(HttpServletResponse response, @RequestHeader("token") String token, @Validated @RequestBody SwitchParams params, BindingResult result){

        params.setToken(token);
        params.setResponse(response);
        return siteService.switchSite(params);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值