五、基于Spring Aop的方式实现项目的登录拦截认证

 一、比较简单,自定义一Aop拦截类

package com.cg.demo.config.aspect;

import com.cg.demo.entity.User;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.List;

/**
* 说明:
*
* @auther panhh
* @date 2019/7/12 10:50
*/
@Aspect
@Component
public class LoginAspect {

@Pointcut(value = "execution(public * com.cg.demo.web.user..*.*(..)))")
public void pointCutMethod(){
}

@Around(value = "pointCutMethod()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("doAroundMethod 前置通知~~~~");

//获取session
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes())
.getRequest();
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getResponse();
HttpSession session = request.getSession();
Object acc_token = session.getAttribute("acc_token");
if (acc_token == null){
return "redirect:/login";
}

//获取传入参数
//getParam(pjp);

//proceed 是方法的返回值
Object proceed = pjp.proceed();
System.out.println("proceed-->"+proceed.toString());

return proceed;
}

/**
* 获取请求参数
* @param pjp
*/
private void getParam(ProceedingJoinPoint pjp) {
HashMap<Object, Object> map = new HashMap<>();
Object[] args = pjp.getArgs();
System.out.println(args.toString());
String[] paramNames = ((MethodSignature)pjp.getSignature()).getParameterNames();
for (int i = 0;i < args.length;i++){
if(args[i] instanceof User){
map.put(paramNames[i],args[i]);
}
}
System.out.println("map--->"+map);
User user = (User) map.get("user");
System.out.println("user--->"+user);
}
}

二、项目包结构
  user包下相当于资源包(会被aop拦截的内容)
  login登录包不拦截

 三、pom.xml文件

  

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cg.demo</groupId>
<artifactId>some_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>some_demo</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<!-- swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>

<!-- swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>

<!--Aop-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

posted @ 2019-07-12 16:06  斩你形神,明我道心  阅读(1070)  评论(0编辑  收藏  举报