SpringMVC 11 Ajax验证用户名体验和拦截器

11.1 Ajax验证用户名


  1. 写一个 login.jsp 这个页面
<%--
  Created by IntelliJ IDEA.
  User: muqua
  Date: 2022/7/26
  Time: 19:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录验证</title>
    <script src="${pageContext.request.contextPath}/static/js/jquery-3.6.0.js"></script>
</head>
<body>

<p>
    用户名:<input type="text" id="name" onblur="a1()">
    <br>
    <span id="userInfo"></span>
</p>
<p>
    密码:<input type="text" id="pwd" onblur="a2()">
    <br>
    <span id="pwdInfo"></span>
</p>


<script>
    function a1(){
        $.post({
            url: "${pageContext.request.contextPath}/a3",
            data: {
                "name": $("#name").val()
            },
            success: (res) => {
                if(res === 'ok'){
                    $("#userInfo").css("color","green");
                }else{
                    $("#userInfo").css("color","red");
                }
                $("#userInfo").html(res);
            }
        })
    }

    function a2(){
        $.post({
            url: "${pageContext.request.contextPath}/a3",
            data: {
                "pwd": $("#pwd").val()
            },
            success: (res) => {
                if(res === 'ok'){
                    $("#pwdInfo").css("color","green");
                }else{
                    $("#pwdInfo").css("color","red");
                }
                $("#pwdInfo").html(res);
            }
        })
    }
</script>

</body>
</html>

  1. 写 Controller
@RequestMapping("/a3")
    public String a3(String name,String pwd){
        String msg = "";
        System.out.println(name + " || " + pwd);
        if(name != null){
            // admin 这些数据 应该在数据库中查
            if("admin".equals(name)){
                msg = "ok";
            }else{
                msg = "用户名有误";
            }
        }
        if(pwd != null){
            // admin 这些数据 应该在数据库中查
            if("123".equals(pwd)){
                msg = "ok";
            }else{
                msg = "密码有误";
            }
        }
        return msg;
    }

在这里插入图片描述


11.2 拦截器

SpringMVC 的处理拦截器 类似于 Servlet 开发中的 过滤器 Filter,用于 对 处理器进行预处理和后处理。开发者 可以自己定义一些拦截器来实现 特定的功能。

过滤器和拦截器的区别:拦截器是基于AOP思想开发出来的具体应用。也就是说 它是切面编程的,不会对原有的 代码 有影响。

拦截器还有一个最大的好处:它会自动的过滤掉 jsp、html、css、image、js 等一系列资源文件,不去做 拦截的访问。而只对 Controller 方法进行拦截!!!

  1. applicationContext.xml 中 配置 拦截器
<?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
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--    自动扫描包,让指定包下面的注解生效,并且 由 IOC 容器 统一去管理 -->
    <context:component-scan base-package="top.muquanyu.controller"></context:component-scan>

    <!--    让 Spring MVC 不处理 静态 资源 你像什么 .css .js .mp3 .mp4 啥的
    不需要咱们处理,这些资源 jsp 自己就处理了。意思就是不会经过 handler 而是 直接 用这个资源文件-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>

    <!--
            支持 mvc 注解 的驱动
            在 spring 中 一般 采用 @RequestMapping 注解来完成 映射关系
            要想使 @RequestMapping 注解生效,必须向上下文中注册 DefaultAnnotationHandlerMapping
            和一个 AnnotationMethodHandlerAdapter 实例
            这两个 实例 分别 在 类级别 和 方法级别 上进行 处理
            而 annotation-driven 这个配置 就是帮助我们 自动 配置 上面 两个实例的 bean 注入的。
    -->
    <mvc:annotation-driven>
        <!--解决json乱码问题-->
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!--    视图解析器 这玩意 无论咋滴,都得配置-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--        前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <!--        后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>
    
<!--    拦截器的配置-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**/"/>  <!--待过滤的请求-->
            <bean class="top.muquanyu.config.MyInterceptor"></bean> <!--用到的拦截器类-->
        </mvc:interceptor>
    </mvc:interceptors>

</beans>
  1. 写一个类 并且 实现 HandlerInterceptor 接口,就是一个拦截器了。

preHandle:请求目标页面/Controller方法 处理前,触发拦截。
postHandleController方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作
afterCompletionDispatcherServlet进行视图的渲染之后,多用于清理资源。

preHandle 的返回值 是 boolean 类型的,返回 true 则继续执行下一个拦截器 或 直接访问到页面。返回 false 则 卡住 不再往下执行。

package top.muquanyu.config;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("============处理前============");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("============处理后============");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("============进行清理============");
    }
}
package top.muquanyu.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @RequestMapping("/t1")
    public String test(){
        System.out.println("TestController==> test() 执行了!");
        return "OK";
    }
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值