五、基於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>
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM