Java Tokenintercepterを使用して、Sessionの確認

# TokenInterceptorとは
Controllerの実行前後に処理を追加する

#使用環境
Java
Springboot
SpringToolSweet4

#実装方法
・プロジェクト構造
![スクリーンショット 2021-03-30 16.52.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172696/6f81dd65-0d5e-b4d4-9702-0d6af53286f3.png)

以下ファイルを作成

```java:TokenInterceptor.java
package com.example.demo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

// HandlerInterceptorAdapterを継承
@SuppressWarnings("deprecation")
public class TokenInterceptor extends HandlerInterceptorAdapter {

    @Autowired
	HttpSession session;
    
    // ①コントローラメソッドの実行前に呼ばれる
    @Override
    public boolean preHandle(
                    HttpServletRequest request,
                    HttpServletResponse response,
                    Object handler) throws Exception {

		//セッション取得
        String sessiondata;
        sessiondata = request.getSession().getId();
        
        //セッション有効時間取得
        int intervalTime = session.getMaxInactiveInterval();
        
        //セッション保存データ取得
    	String user = (String) session.getAttribute("sessiondata");
    	
    	System.out.println(sessiondata);
    	System.out.println(user);
    	System.out.println(intervalTime);
    	
    	if(intervalTime==1800) {
    		session.setMaxInactiveInterval(180);
    	}
    	
    	//Interceptorで全指定しているので、最初はnullになる為、nullの場合はスルーする
    	if(!(user==null)) {
        	if (!(sessiondata.equals(user))) {
        		throw new NotValidSessionException("セッションが切れました。再度ログインして下さい。");
        	}  		
    	}

        System.out.println("preHandle");
        return true;
    }


	// ②コントローラメソッドの実行後に呼ばれる
    @Override
    public void postHandle(
                        HttpServletRequest request,
                        HttpServletResponse response,
                        Object handler,
                        ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    // ③リクエスト処理の完了後に呼ばれる
    @Override
    public void afterCompletion(
                        HttpServletRequest request,
                        HttpServletResponse response,
                        Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }
}
```
以下に記載されているパス配下のファイルに適用される

```xml:spring-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 
    <context:property-placeholder location="classpath:*.properties" />

    <!-- インターセプタの定義 -->
     <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.example.demo.TokenInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>
     
</beans>

```

@SpringBootApplicationがついているクラスに上記XMLを読み込ませる

```java:Demo24Application.java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@Configuration
@ImportResource("spring-context.xml")
public class Demo24Application {

	public static void main(String[] args) {
		SpringApplication.run(Demo24Application.class, args);
	}

}

```

アプリケーション起動後にログにSession情報が出力されていることを確認

![スクリーンショット 2021-03-30 18.46.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172696/9a0a2107-aa58-ef98-3805-ff7350ba7ed6.png)