springboot項目は、インターセプタは、次の目的で使用することができます。
- ログイン認証のために、
- 性能チェック。
- ロギング;
例を検証するためにログインします。
インターセプタを書き換える必要がある、コンフィギュレーション・クラスを作成
インターセプター以下のコードを書き換える(インターセプタは、コントローラの前に実行されます)
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute("user");
if (user == null){
request.setAttribute("msg","当前没有权限,请先登录");
request.getRequestDispatcher("/login").forward(request,response);
return false;//流程中断
}else {
return true;//流程继续
}
}
}
Configurationクラスコード:addPathPatterns //これはexcludePathPatternsがインターセプトにカンマで複数のパスを、この中間のパスを除外し、インターセプトを追加するためのパスです。
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//添加自定义拦截器,添加拦截路径和排除拦截路径
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/","/index.html","/login","/userLogin","/static/**");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
WebMvcConfigurer.super.addResourceHandlers(registry);
}
}
コントローラ
@Controller
public class LoginController {
@PostMapping("/userLogin")
public String userLogin(String username, String password, Model model,HttpSession session){
if (!StringUtils.isEmpty(username) && "123456".equals(password)){
//记录登录状态
session.setAttribute("user",username);
//跳转到主页
return "redirect:main.html";
}else {
model.addAttribute("msg","用户名或密码错误");
return "login";
}
}
}