//登录页面判断@RequestMapping("/login")public String login(String name, String password, HttpServletRequest request){//equalsIgnoreCase: 忽略大小写if("zar".equalsIgnoreCase(name)&& "123".equalsIgnoreCase(password)){//在Session中存储用户信息,用于进行权限验证//以后是从数据库中查询数据库中的详细信息request.getSession().setAttribute("users",name);return "main";}else {request.setAttribute("errMsg","用户名或密码不正确");return "login";}}
开发拦截器
没有强制让我们实现(没报错)?
看这个接口
package org.springframework.web.servlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.lang.Nullable;import org.springframework.web.method.HandlerMethod;public interface HandlerInterceptor {default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {return true;}default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,@Nullable ModelAndView modelAndView) throws Exception {}default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,@Nullable Exception ex) throws Exception {}}
**default**有默认实现,这是**JDK8**以后的新特性,以后你需要哪个功能,你就重写哪个方法就行因为只有预处理,才可以判断是否放行,所以返回值是
**布尔类型**,其余俩个方法,都是处理完后的返回,所以是**void**
package com.chentianyu.interceptor;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//是否登录过的判断if(request.getSession().getAttribute("users") == null){//此时就是没有登录,返回登录,并给出提示request.setAttribute("noLoginWar","您还没有登录,请先登录!");request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);return false;}return true;//放行请求}}
注册拦截器
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"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"><context:component-scan base-package="com.chentianyu.controller" /><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><mvc:default-servlet-handler /><mvc:annotation-driven /><!--注册拦截器--><mvc:interceptors><!--多个拦截器会形成拦截器链--><mvc:interceptor><!--映射要拦截的请求--><mvc:mapping path="/**"/><!--拦截了所有,就连登录也拦截了,这样你的项目永远都不能访问到--><!--设置放行的请求--><mvc:exclude-mapping path="/showLogin"/><mvc:exclude-mapping path="/login"/><!--配置具体的拦截器实现功能的类--><bean class="com.chentianyu.interceptor.LoginInterceptor"></bean></mvc:interceptor><!--<mvc:interceptor><mvc:mapping path=""/><</mvc:interceptor>--></mvc:interceptors></beans>
我们先把浏览器关闭,再次打开,这一步是为了让session失效,然后访问[http://localhost:8080/showMain](http://localhost:8080/showMain)
其实效果已经出现了。登陆后
再开一个窗口访问[http://localhost:8080/showMain](http://localhost:8080/showMain)
就能访问到这个页面(就是什么都没写,只有一个标题而已)
