1. 程式人生 > >sprintboot 簡單登入攔截

sprintboot 簡單登入攔截

最近做了一個小專案,只有幾個頁面,不過也要用到登入攔截,看了網上的部落格,自己整理了一下

1、攔截請求和設定不攔截的請求地址

package com.windy.atest;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {

    @Bean   
    public HandlerInterceptor getMyInterceptor(){
        return new MyInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // addPathPatterns 用於新增攔截規則, 這裡假設攔截 /url 後面的全部連結
        // excludePathPatterns 使用者排除攔截
        //registry.addInterceptor(getMyInterceptor()).addPathPatterns("/**");
            String[] urlArry={"/login","/loginHandle"};//不攔截的訪問路徑 
        registry.addInterceptor(getMyInterceptor()).addPathPatterns("/**").excludePathPatterns(urlArry);

        super.addInterceptors(registry);
    }
}
 

2、如果請求沒有session,則返回到登入頁面

package com.windy.atest;

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

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class MyInterceptor implements HandlerInterceptor {
    
   
    
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {

        Object sessionid=request.getSession().getAttribute("password");
        if(sessionid!=null){
            System.out.println("有session");
            return true;
        }else{
            response.sendRedirect("/tomcat/login");//如果沒有session
            return false;
        }
        
    }
 
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle被呼叫");
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("afterCompletion被呼叫");
    }
}

3、測試

登入頁:

提交之後登入成功:

訪問一個被攔截的地址看看:成功

換一個瀏覽器訪問該地址看看:

跳轉到了登入頁,說明攔截成功

示例專案程式碼:

連結:https://pan.baidu.com/s/1XZb16bezrAVHZ4HHcT_0OA 
提取碼:rzqd