zoukankan      html  css  js  c++  java
  • SpringBoot整合Mybatis完整详细版二:注册、登录、拦截器配置

       接着上个章节来,上章节搭建好框架,并且测试也在页面取到数据。接下来实现web端,实现前后端交互,在前台进行注册登录以及后端拦截器配置。实现简单的未登录拦截跳转到登录页面

    上一节传送门:SpringBoot整合Mybatis完整详细版

    本章完整代码:SpringBoot整合Mybatis完整详细版含注册、登录、拦截器配置

    天也不早了,开干


    首先要实现web端需要在pom里引入jar包,前端用thymeleaf,所以在pom里添加以下内容

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    然后application-dev.yml里配置一下thymeleaf,如下

    server:
      port: 8888
    
    mybatis:
      mapper-locations: classpath:mapping/*Mapper.xml
      type-aliases-package: com.example.entity
    
    #showSql
    logging:
      level:
        com:
          example:
            mapper : debug
    
    spring:
      datasource:
        username: root
        password: 1234
        url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
        driver-class-name: com.mysql.jdbc.Driver
      thymeleaf:
        cache: false
        prefix: classpath:/templates/
        suffix: .html
        encoding: utf-8
        mode: html5
        servlet:
          content-type: text/html

    下面写页面吧,在templates里创建需要的页面index.html、register.html、welcome.html。由于目标是实现功能,所以界面很简洁,样式统统省掉了,回归原始

    register.html(注册页面)

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>register</title>
    </head>
    <body>
    
    <form action="/user/register" method="post">
        请输入用户名--:<input type="text" name="userName" id="userName"/><br>
        请你输入密码--:<input type="password" name="passWord" id="passWord"/><br>
        <input type="submit" value="Register"/>
    </form>
    
    </body>
    </html>

    index.html(登录页面)

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <!--<link rel="stylesheet" href="test.css" type="text/css" />-->
    <form action="/user/loginUser" method="post">
        请输入用户名--:<input type="text" name="userName" id="userName"/><br>
        请你输入密码--:<input type="password" name="passWord" id="passWord"/><br>
        <input type="submit" value="Login"/>
        <a href="/user/toRegister">--注册--</a>
    </form>
    
    </body>
    </html>

    welcome.html(退出登录页面,用于测试拦截器)

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    注册或登录后才能看到的界面
    
    <a href="/user/outUser">退出登录</a>
    </body>
    </html>

    页面简洁(丑)到没朋友,下面后台实现逻辑,一套流程直接走起,不多解释了,直接放代码

    controller下新建一个LoginController.java。我把注册登录退出登录方法全贴出来了

    package com.example.controller;
    
    import com.example.entity.User;
    import com.example.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    
    /**
     * @Author:wjup
     * @Date: 2018/9/27 0027 11:14
     */
    
    @Controller
    @RequestMapping("/user")
    public class LoginController {
        @Autowired
        private UserService userService;
    
        //跳转首页(登录页)
        @RequestMapping("/toIndex")
        public String show(){
            return "index";
        }
    
        //登录操作
        @ResponseBody
        @RequestMapping("/loginUser")
        public String login(User user, HttpServletRequest request){
            String userName = user.getUserName();
            String passWord = user.getPassWord();
            User u1 =userService.login(userName,passWord);
            if (u1==null){
                return "用户名或密码错误";
            }else{
                request.getSession().setAttribute("session_user",user);//登录成功后将用户放入session中,用于拦截
                return "登录成功";
            }
        }
    
        //跳转注册页
        @RequestMapping("/toRegister")
        public String toRegister(){
            return "register";
        }
    
        //注册操作
        @RequestMapping("/register")
        public String register(User user){
            int su = userService.register(user);
            if(su==0){
                System.out.println("----");
            }
            return "welcome";
        }
    
        //测试未登陆拦截页面
        @RequestMapping("/welcome")
        public String welcome(){
            return "welcome";
        }
    
        //退出登录
        @RequestMapping("/outUser")
        public void outUser(HttpServletRequest request, HttpServletResponse response) throws IOException {
            request.getSession().removeAttribute("session_user");
            response.sendRedirect("/user/toIndex");
        }
    
    }
    

    UserService.java

    package com.example.service;
    
    import com.example.entity.User;
    import com.example.mapper.UserMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    /**
     * @Author:0xOO
     * @Date: 2018/9/26 0026
     * @Time: 15:23
     */
    @Service
    public class UserService {
        @Autowired
        UserMapper userMapper;
        public User Sel(int id){
            return userMapper.Sel(id);
        }
    
        public User login(String userName, String passWord) {
            return userMapper.login(userName,passWord);
        }
    
        public int register(User user) {
            return userMapper.register(user);
        }
    }
    

    UserMapper.java

    package com.example.mapper;
    
    import com.example.entity.User;
    import org.apache.ibatis.annotations.Select;
    import org.springframework.stereotype.Repository;
    
    /**
     * @Author:0xOO
     * @Date: 2018/9/26 0026
     * @Time: 15:20
     */
    @Repository
    public interface UserMapper {
    
        User Sel(int id);
    
        User login(String userName,String passWord);
    
        int register(User user);
    }
    

    UserMapping.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.example.mapper.UserMapper">
    
        <resultMap id="BaseResultMap" type="com.example.entity.User">
            <result column="id" jdbcType="INTEGER" property="id" />
            <result column="userName" jdbcType="VARCHAR" property="userName" />
            <result column="passWord" jdbcType="VARCHAR" property="passWord" />
            <result column="realName" jdbcType="VARCHAR" property="realName" />
        </resultMap>
    
        <select id="Sel" resultType="User">
            select * from user where id = #{id}
        </select>
    
        <select id="login" resultType="User">
            SELECT * FROM user where userName = #{param1} and passWord = #{param2}
        </select>
    
        <insert id="register" parameterType="User">
            INSERT INTO user (userName, passWord) VALUES (#{userName}, #{passWord})
        </insert>
    </mapper>
    

    到这里就实现了登录注册了

    其实注册登录也诶逻辑也很简单,就不多赘述了,接下来讲讲实现拦截器功能(敲黑板,本章的重点)

    首先在com.example下新建intercetor包,然后新建UserIntercetor.java实现HandlerInterceptor接口并重写方法,更多介绍都写在里面注释了

    UserIntercetor.java

    package com.example.interceptor;
    
    import com.example.entity.User;
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * @Author:wjup
     * @Date: 2018/9/28 0028 10:15
     */
    @Component
    public class UserInterceptor implements HandlerInterceptor {
    
        /*
         * 进入controller层之前拦截请求
         * 返回值:表示是否将当前的请求拦截下来  false:拦截请求,请求别终止。true:请求不被拦截,继续执行
         * Object obj:表示被拦的请求的目标对象(controller中方法)
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
            System.out.println("执行到了preHandle方法");
            System.out.println(handler);
            User user = (User) request.getSession().getAttribute("session_user");
            if (user==null){
                response.sendRedirect(request.getContextPath()+"/user/toIndex");//拦截后跳转的方法
                System.out.println("已成功拦截并转发跳转");
                return false;
            }
            System.out.println("合格不需要拦截,放行");
            return true;
        }
    
        /*
         * 处理请求完成后视图渲染之前的处理操作
         * 通过ModelAndView参数改变显示的视图,或发往视图的方法
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
            System.out.println("执行了postHandle方法");
        }
    
        /*
         * 视图渲染之后的操作
         */
        @Override
        public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
            System.out.println("执行到了afterCompletion方法");
        }
    
    }
    

    新建类SessionInterceptor实现WebMvcConfigurer接口来注册拦截器

    SessionInterceptor.java(类里的注释说明也很详细)

    package com.example.interceptor;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @Author:wjup
     * @Date: 2018/9/28 0028 10:28
     */
    @Configuration
    public class SessionInterceptor implements WebMvcConfigurer {
    
        /**
         * 自定义拦截器,添加拦截路径和排除拦截路径
         * addPathPatterns():添加需要拦截的路径
         * excludePathPatterns():添加不需要拦截的路径
         */
        //注册拦截器
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            List list = new ArrayList();
            list.add("/user/toIndex");
            list.add("/user/loginUser");
            list.add("/user/toRegister");
            list.add("/user/register");
            registry.addInterceptor(new UserInterceptor()).addPathPatterns("/**").excludePathPatterns(list);
    
        }
    }
    

    这个类中我放行了四个请求,一共写了五个请求,还有一个  "/user/welcome"  请求没有放行,就是用于测试拦截器效果。

    下面分别看下登录和未登录的拦截效果:

    由于在session中没有获取到用户,所以UserIntercetor.java里的preHandle方法拦截了下来,并进行重定向到了/toIndex方法,打开了登录页面

    可以看到页面可以访问打开welcome.html的,后台获取到session中的用户后也放行了。

    至此也完成了,本章节的任务


    ---路漫漫其修远兮,吾将上下而求索

  • 相关阅读:
    网格模型和X文件使用面面观(转)
    3D中的OBJ文件格式详解(转载)
    机器学习随笔01
    WinForm ListControl MouseWheel Envent
    如何判断一个元素在亿级数据中是否存在? 很难吗...
    windows 虚拟机VMware 安装linux系统注意事项!!!
    windows phpinfo上不能找到memcache扩展 php版本5.6
    php 判断两个时间段是否有交集
    tp5.0 根据经纬度 获取附近信息
    php 前台生成多维数组 后台批量添加
  • 原文地址:https://www.cnblogs.com/wjup/p/10576081.html
Copyright © 2011-2022 走看看