登錄
開發期間模板引擎頁面修改以後,要實時生效
- 禁用模板引擎的緩存 spring.thymeleaf.cache=false
- 頁面修改完成以後,ctrl+f9:重新編譯
- 登錄錯誤消息顯示 th:text="${msg}" th:if="${not #string.isEmpty(msg)}"
- 登錄成功,表單防止重複提交,重定向到組件,然後用組件轉發
攔截器
注意:攔截器說明,在SpringBoot1.5x時,靜態資源在static目錄下,訪問路徑不需要帶/static,而且攔截器不會對靜態資源攔截;但是SpringBoot2.0x以上時,靜態資源會被攔截,並且訪問路徑需要帶上/static,當然攔截器也要放行靜態資源;
1、編寫攔截器類LoginHandlerInterceptor實現HandlerInterceptor
package com.xue.springbootweb.component;
import org.aopalliance.intercept.Interceptor;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Description
* 登錄攔截
* @Author xuexue
* @Date 2019/10/14 20:29
*/
public class LoginHandlerInterceptor implements HandlerInterceptor {
//登錄之前進行攔截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//獲得session
Object status = request.getSession().getAttribute("status");
if (status == null) {
//向頁面添加錯誤信息
request.setAttribute("msg", "沒有權限訪問");
//轉發到登錄頁面
request.getRequestDispatcher("/login").forward(request, response);
return false;
}
//放行
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
2、註冊攔截器(放行登錄頁面與登錄處理頁面)
- MyMvcConfig實現WebMvcConfigurer
- 重寫addInterceptors方法註冊
代碼如下:
package com.xue.springbootweb.config;
import com.xue.springbootweb.component.LoginHandlerInterceptor;
import com.xue.springbootweb.component.MyLocaleResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
/**
* @Description
* 擴展SpringMVC功能
* @Author xuexue
* @Date 2019/10/14 9:16
*/
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
/**
* 頁面控制
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//跳轉至登錄頁面
registry.addViewController("/login").setViewName("login");
registry.addViewController("/login.html").setViewName("login");
//做重定向到登錄處理
registry.addViewController("/main").setViewName("index.html");
}
/**
* 註冊攔截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
//登錄頁面、登錄處理頁面不能攔截
registry.addInterceptor(new LoginHandlerInterceptor()).
addPathPatterns("/**").
excludePathPatterns("/login", "/login.html", "/user/login");
}
}
如果SpringBoot在2.0x版本以上則需要放行/static/**
/**
* 登錄攔截器
*
* @param registry
*/
public void addInterceptors(InterceptorRegistry registry) {
String[] excludes = new String[]{"/login", "/login.html", "/user/login", "/static/**"};
registry.addInterceptor(new MyInterceptor()).
addPathPatterns("/**").
excludePathPatterns(excludes);
}