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