spring boot 使用AOP实现对各步操作的是否登录的校验
- 编写LoginHelper,放在com.nchu.hep.util包下
package com.nchu.hep.util;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
*
* AOP验证 登录
* @author
*
*/
@Component
@Aspect
public class LoginHelper {
private static Logger logger = LogManager.getLogger(LoginHelper.class);
@Pointcut("within(com.nchu.hep.controller..*)&&!within(com.nchu.hep.controller.HomeController)") // HomeController中写了登录方法
public void login() {
}
@Around("login()")
public Object auth(ProceedingJoinPoint joinPoint) throws Throwable {
// 获取session中的用户信息
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String username = (String) request.getSession().getAttribute("userName");
if (username == null) {
logger.info("未登录");
//返回登录界面
return "redirect:/";
}
logger.info("username: " + username);
return joinPoint.proceed();
}
}
- 编写登录方法
//登录至主页面
@RequestMapping("/login")
public String login(HttpServletRequest request,String userPhone,String userPassword) {
//登录逻辑
if(userRepo.Login(userPhone,userPassword).size()>0) {
request.getSession().setAttribute("userName", userPhone); // 保存userName到session看这里
return "index";
}else {
return "login";
}
}
使用AOP进行登录验证,可以实现在每一步操作时都会验证当前是否已经登录,若已登录,则可以继续操作,若没有登录,则跳转的登录界面进行登录。其原理就是在登录时将用户信息存到session中,然后在后面进行每一步操作时都检验session中是否有数据。