springmvc+shiro自定义过滤器的实现代码

实现需求:

1.用户未登录,跳转到登录页,登录完成后会跳到初始访问页。

2.用户自定义处理(如需要激活),跳转到激活页面,激活完成后会跳到初始访问页。

使用到的框架

springmvc 的拦截器

shiro 自定义过滤器

实现:

1.编写拦截器通过session保存初始访问的页面地址,便于后面回跳这个页面做准备。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 用户登录以后跳转回之前页面的拦截器 拦截对象: 除登录,注册之外的所有跳转页面的请求 因为用户随时可能进行登录操作
 *
 * @version 1.0.0
 * @date 2018 -10-19
 */
public class ForwardBeforeUrlInteceptor implements HandlerInterceptor {
 private Logger logger = LoggerFactory.getLogger(this.getClass());
 @Override
 public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
  throws Exception {
 }
 @Override
 public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
  throws Exception {
 }
 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
 // 过滤掉ajax请求
 if (request.getHeader("x-requested-with") != null
  && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
  return true;
 }
 // 获取当前会话
 HttpSession session = request.getSession(true);
 // 拿到上一个页面地址
 String uri = request.getRequestURI();
 // 去掉项目地址长度的字符(因为我的默认项目地址是给出的)
 String path = uri.substring(request.getContextPath().length());
 // 得到参数
 String query = request.getQueryString();
 if (query == null) {
  query = "";
 } else {
  query = "?" + query;
 }
 String beforePath = path + query;
 session.setAttribute("beforePath", beforePath);
 session.setAttribute("method", request.getMethod());
 logger.debug("beforePath :{}, method:{}", beforePath, request.getMethod());
 return true;
 }
}

2.在spring的xml配置文件中配置拦截器,例如application.xml

 <mvc:interceptors>
    <!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求 -->

    <!-- 配置用于跳回登录之前的页面的拦截器-->
    <mvc:interceptor>
      <!-- 进行拦截:/**表示拦截所有url及其子路径 -->
      <mvc:mapping path="/**" />
      <!-- ajax请求的action不进行拦截 -->
      <mvc:exclude-mapping path="/*.ajax" />
      <mvc:exclude-mapping path="/resources/**" />
      <mvc:exclude-mapping path="/activation" />
      <bean class="com.xxx.xxx.xxx.interceptor.ForwardBeforeUrlInteceptor" />
    </mvc:interceptor>
  </mvc:interceptors>

注意:<mvc:exclude-mapping path="/activation" /> 此处是界面可以直接进入激活页面,此处是排除拦截激活页面,防止页面出现不停的回跳到自己页面。

3.自定义过滤器。

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * 课程拦截器,当会员过期或未激活时自动跳转到激活页面
 *
 * @version 1.0.0
 * @date 2018 -10-19
 */
public class MemberFilter extends com.bwjf.framework.shiro.filter.UserFilter {
 @Override
 protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
 HttpServletResponse httpServletResponse = (HttpServletResponse) response;
 HttpServletRequest httpServletRequest = (HttpServletRequest) request;
 if (httpServletRequest.getRequestURI().indexOf("activation") > 0) {
  return true;
 }
 MyShiroUser myShiroUser = MyUserUtil.getCurrentShiroUser();
 if (!CheckEmptyUtil.isEmpty(myShiroUser) && CheckEmptyUtil.isEmpty(myShiroUser.getActiveDate())) {
  try {
      // 浏览器跳转到激活页面
  httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/activation");
  } catch (IOException e) {
  e.printStackTrace();
  }
 }
 return true;
 }
}

4.shiro.xml配置自定义过滤器

5.controller激活处理后跳转到初始页面

总结

以上所述是小编给大家介绍的springmvc+shiro自定义过滤器的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Springmvc的运行流程图文详解

    一.常见类及其作用 HandlerExecutionChain : Handler执行链对象, 包含了请求处理器对象 以及所有的拦截器对象. HandlerMapping : 定义了所有的请求与 所有的请求处理器之间的映射. HandlerAdaptor: 请求处理器适配器对象, 负责完成请求处理器对象的调用 . 方法的执行等- 二. 运行流程: 浏览器端发送请求到服务器端: 1.1 当前的请求在DispatcherServlet中不存在对应的映射 ① 是否配置mvc:default-servl

  • springmvc中RequestMappingHandlerAdapter与HttpMessageConverter的装配讲解

    一.DispatcherServlet 默认装配 RequestMappingHandlerAdapter ,而 RequestMappingHandlerAdapter 默认装配如下 HttpMessageConverter HttpMessageConverter: 2)加入jackson jar 包后,RequestMappingHandlerAdapter 装配的HttpMessageConverter 如下: 二. HttpMessageConverter 1)HttpMessageC

  • 详解如何全注解方式构建SpringMVC项目

    简述 SpringBoot对Spring的的使用做了全面的封装,使用SpringBoot大大加快了开发进程,但是如果不了解Spring的特性,使用SpringBoot时会有不少问题 目前网上流传使用IDEA比Eclipse效率更加高,在搭建项目时,也尝试使用IDEA,但是由于习惯问题,最终还是使用了Eclipse,以后也别再折腾了,专注于开发本身更加重要 这是个简单的SpringMVC项目,目的在于帮助理解Spring4的SpringMVC的搭建,采用注解方式.项目简单得不能再简单,采用tomc

  • springmvc+kindeditor文件上传实例详解

    本文实例为大家分享了springmvc+kindeditor文件上传的具体代码,供大家参考,具体内容如下 下载kindeditor 压缩包里面的jar放到tomcat的lib文件夹下,kindeditor文件放工程里,不用的可以删掉 jsp页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ ta

  • Spring MVC学习教程之RequestMappingHandlerAdapter详解

    前言 RequestMappingHandlerAdapter实现了HandlerAdapter接口,顾名思义,表示handler的adapter,这里的handler指的是Spring处理具体请求的某个Controller的方法,也就是说HandlerAdapter指的是将当前请求适配到某个Handler的处理器.RequestMappingHandlerAdapter是HandlerAdapter的一个具体实现,主要用于将某个请求适配给@RequestMapping类型的Handler处理.

  • spring+springmvc+mybatis 开发JAVA单体应用

    myshop 概述 myshop项目是根据视频教程 Java 单体应用 做的一个练习项目,目前完成了登录功能.用户管理.类别管理后续有时间会继续做其它的功能.趁着双11花了99元一年买了台阿里云服务器,演示地址>> myshop 项目地址  https://gitee.com/yehuabin/myshop 项目结构 my-shop-dependencies:管理jar包的版本,所有项目依赖此项目 my-shop-commons:项目通用工具.实体类 my-shop-domain: POJO类

  • Spring整合Springmvc的相关介绍

    1. 是否需要整合 ? 不需要 : 单独使用Springmvc. 需要将原先Spring中的内容通通迁移到Springmvc中. 例如:数据源.事务.AOP.Service .Dao - 需要: 使用Spring + Springmvc. Spring : 数据源.事务.AOP.Service .Dao - Springmvc : 只负责WEB相关的. 2. Spring容器对象如何进行创建? 非WEB环境: 直接在main方法 或者是junit测试方法中 通过new ClassPathXmlA

  • Springmvc实现文件上传

    本文实例为大家分享了Springmvc实现文件上传的具体代码,供大家参考,具体内容如下 1.环境搭建: 在maven的pom.xml文件中导入两个依赖 1).commons-fileupload 2).commons-io 在resources目录下的springmvc.xml文件中配置multipartResolver <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:/

  • webuploader+springmvc实现图片上传功能

    本文为大家分享了webuploader springmvc实现图片上传的具体代码,供大家参考,具体内容如下 jsp文件 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&qu

  • 详解SpringMVC的类型转换及验证方法

    Spring mvc 数据绑定流程: SpringMvc将ServletRequest对象及目标方法的形参实例传给WebDataBinderFactory实例,以创建DataBinder实例对象.DataBinder调用装配在SpringMvc上下文中的ConversionService组件进行类型转换和数据格式化工作,将Servlet请求信息填充到形参对象中.调用Validator主键对已经绑定了请求信息的形参对象精选数据有效性验证,并最终生成数据绑定结果BindingData对象.Sprin

随机推荐