SpringMVC拦截器——实现登录验证拦截器的示例代码

 更新时间:2017年02月21日 15:27:53   作者:UniqueColor  
本篇文章主要介绍了SpringMVC拦截器——实现登录验证拦截器的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现

当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面

核心代码

首先是index.jsp,显示链接

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>" rel="external nofollow" >
  
  <title>首页</title>
  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">  
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
  <!--
  <link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" >
  -->
 </head>
 
 <body>
   <div style="margin:0 auto;padding-top:100px;font-size:18px;" align="center">
     <p><a href="loginpage.html" rel="external nofollow" >登陆</a></p>
     <p><a href="user/home.html" rel="external nofollow" >用户中心</a></p>
     <p><a href="exception.html" rel="external nofollow" >触发异常</a></p>
   </div>
 </body>
</html>

controller类

package com.jikexueyuan.demo.springmvc.lesson4.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.jikexueyuan.demo.springmvc.lesson4.constant.Global;
import com.jikexueyuan.demo.springmvc.lesson4.exception.MyException;
import com.jikexueyuan.demo.springmvc.lesson4.model.User;
import com.jikexueyuan.demo.springmvc.lesson4.service.LoginService;

/**
 * 这个例子讲解了如何定义MVC三层注解,使用@Resource进行注入,以及使用@RequestMapping、@RequestParam 、@SessionAttributes
 */

@Controller
public class LoginController extends BaseController {

  @Resource
  LoginService service;
  
  @Resource
  HttpServletRequest request;
  
  @RequestMapping("/exception")
  public void exception() throws MyException{
    throw new MyException("测试springmvc中的异常捕获");
  }
  
  @RequestMapping("/loginpage")
  public String toLoginPage(){
    return "/WEB-INF/jsp/login.jsp";
  }
  
  @RequestMapping("/user/home")
  public String toUserHome(){
    return "/WEB-INF/jsp/userhome.jsp";
  }
  
  @RequestMapping("/logout")
  public String logout(){
    request.getSession().removeAttribute(Global.USER_SESSION_KEY);
    return "redirect:/";
  }
  
  @RequestMapping(value = "/doLogin", method = RequestMethod.POST)
  public String doLogin(@RequestParam String userName, @RequestParam String password){
    
    try {
      User user = service.doLogin(userName, password);
      request.getSession().setAttribute(Global.USER_SESSION_KEY, user);
      return "redirect:/user/home.html";
    } catch (Exception e) {
      return "/WEB-INF/jsp/login.jsp";
    }
    
  }
  
}

当点击用户中心时,触发拦截,相关配置如下

在spring-mvc.xml中加上拦截配置,拦截所有URL中包含/user/的请求,当然请求用户中心时就会触发这个拦截器了

<mvc:interceptors>
    <mvc:interceptor>
      <!-- 拦截所有URL中包含/user/的请求 -->
      <mvc:mapping path="/user/**"/>
      <bean class="com.jikexueyuan.demo.springmvc.lesson4.interceptor.LoginInterceptor"></bean>
    </mvc:interceptor>
  </mvc:interceptors>

然后是bean指向的具体的interceptor类,如果session保存的用户信息为null,则跳到login页面,postHandle和afterCompletion方法都不执行,反之都执行。

package com.jikexueyuan.demo.springmvc.lesson4.interceptor;

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

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

import com.jikexueyuan.demo.springmvc.lesson4.constant.Global;

public class LoginInterceptor implements HandlerInterceptor {

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    Object user = request.getSession().getAttribute(Global.USER_SESSION_KEY);
    if (user == null) {
      System.out.println("尚未登录,调到登录页面");
      response.sendRedirect("/loginpage.html");
      return false;
    }
    
    return true;
  }

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

  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    System.out.println("afterCompletion");
  }

}

至此,简单的springmvc拦截器就完成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java多线程的其他知识_动力节点Java学院整理

    Java多线程的其他知识_动力节点Java学院整理

    这篇文章主要介绍了Java多线程的其他知识,需要的朋友可以参考下
    2017-05-05
  • Hadoop 使用IntelliJ IDEA 进行远程调试代码的配置方法

    Hadoop 使用IntelliJ IDEA 进行远程调试代码的配置方法

    这篇文章主要介绍了Hadoop 使用IntelliJ IDEA 进行远程调试代码的配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Java使用JMeter进行高并发测试

    Java使用JMeter进行高并发测试

    软件的压力测试是一种保证软件质量的行为,本文主要介绍了Java使用JMeter进行高并发测试,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java Thread多线程开发中Object类详细讲解

    Java Thread多线程开发中Object类详细讲解

    这篇文章主要介绍了Java Thread多线程开发中Object类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-03-03
  • java多线程解决生产者消费者问题

    java多线程解决生产者消费者问题

    这篇文章主要介绍了java多线程解决生产者消费者问题的方法,实例分析了java采用多线程的方法解决生产者消费者问题的相关技巧,需要的朋友可以参考下
    2015-05-05
  • 一定要让你搞懂Java位运算符

    一定要让你搞懂Java位运算符

    这篇文章主要为大家介绍了Java位运算符,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • SpringBoot项目热部署的实现

    SpringBoot项目热部署的实现

    SpringBoot项目热部署是一种让开发人员在修改代码后无需重启应用即可看到更改效果的技术,通过使用SpringBoot的DevTools等工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • maven为MANIFEST.MF文件添加内容的方法

    maven为MANIFEST.MF文件添加内容的方法

    这篇文章主要介绍了maven为MANIFEST.MF文件添加内容的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • SpringBoot 常用读取配置文件的三种方法详解

    SpringBoot 常用读取配置文件的三种方法详解

    这篇文章主要介绍了SpringBoot 常用读取配置文件的3种方法,通过本文学习可以解决Spring Boot有哪些常用的读取配置文件方式,一些复杂的数据结构,如list,map如何配置,带着这些问题一起通过本文学习吧
    2022-09-09
  • SpringBoot整合Druid数据源过程详解

    SpringBoot整合Druid数据源过程详解

    这篇文章主要介绍了SpringBoot整合Druid数据源过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12

最新评论