1. //登录页面判断
  2. @RequestMapping("/login")
  3. public String login(String name, String password, HttpServletRequest request){
  4. //equalsIgnoreCase: 忽略大小写
  5. if("zar".equalsIgnoreCase(name)&& "123".equalsIgnoreCase(password)){
  6. //在Session中存储用户信息,用于进行权限验证
  7. //以后是从数据库中查询数据库中的详细信息
  8. request.getSession().setAttribute("users",name);
  9. return "main";
  10. }else {
  11. request.setAttribute("errMsg","用户名或密码不正确");
  12. return "login";
  13. }
  14. }

开发拦截器

没有强制让我们实现(没报错)?

看这个接口

  1. package org.springframework.web.servlet;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.springframework.lang.Nullable;
  5. import org.springframework.web.method.HandlerMethod;
  6. public interface HandlerInterceptor {
  7. default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
  8. throws Exception {
  9. return true;
  10. }
  11. default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
  12. @Nullable ModelAndView modelAndView) throws Exception {
  13. }
  14. default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
  15. @Nullable Exception ex) throws Exception {
  16. }
  17. }

**default**有默认实现,这是**JDK8**以后的新特性,以后你需要哪个功能,你就重写哪个方法就行

因为只有预处理,才可以判断是否放行,所以返回值是**布尔类型**,其余俩个方法,都是处理完后的返回,所以是**void**

  1. package com.chentianyu.interceptor;
  2. import org.springframework.web.servlet.HandlerInterceptor;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. public class LoginInterceptor implements HandlerInterceptor {
  6. @Override
  7. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  8. //是否登录过的判断
  9. if(request.getSession().getAttribute("users") == null){
  10. //此时就是没有登录,返回登录,并给出提示
  11. request.setAttribute("noLoginWar","您还没有登录,请先登录!");
  12. request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
  13. return false;
  14. }
  15. return true;//放行请求
  16. }
  17. }

注册拦截器
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
  7. <context:component-scan base-package="com.chentianyu.controller" />
  8. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  9. <property name="prefix" value="/WEB-INF/jsp/" />
  10. <property name="suffix" value=".jsp" />
  11. </bean>
  12. <mvc:default-servlet-handler />
  13. <mvc:annotation-driven />
  14. <!--注册拦截器-->
  15. <mvc:interceptors>
  16. <!--多个拦截器会形成拦截器链-->
  17. <mvc:interceptor>
  18. <!--映射要拦截的请求-->
  19. <mvc:mapping path="/**"/>
  20. <!--拦截了所有,就连登录也拦截了,这样你的项目永远都不能访问到-->
  21. <!--设置放行的请求-->
  22. <mvc:exclude-mapping path="/showLogin"/>
  23. <mvc:exclude-mapping path="/login"/>
  24. <!--配置具体的拦截器实现功能的类-->
  25. <bean class="com.chentianyu.interceptor.LoginInterceptor"></bean>
  26. </mvc:interceptor>
  27. <!--<mvc:interceptor>
  28. <mvc:mapping path=""/>
  29. <
  30. </mvc:interceptor>-->
  31. </mvc:interceptors>
  32. </beans>

我们先把浏览器关闭,再次打开,这一步是为了让session失效,然后访问[http://localhost:8080/showMain](http://localhost:8080/showMain)
image.png
其实效果已经出现了。登陆后
image.png
再开一个窗口访问[http://localhost:8080/showMain](http://localhost:8080/showMain)image.png
就能访问到这个页面(就是什么都没写,只有一个标题而已)