SSM项目中使用拦截器和过滤器的实现示例

网友投稿 925 2023-01-27

SSM项目中使用-和过滤器的实现示例

SSM项目中使用-和过滤器的实现示例

一、-概述

Spring MVC 也可以使用-对请求进行拦截处理,用户可以自定义-来实现特定 的功能,自定义的-必须实现 HandlerInterceptor 接口

preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求 request 进行处理。如果程序员决定该-对请求进行拦截处理后还要调用其他 的-,或者是业务处理器去进行处理,则返回 true;如果程序员决定不需要 再调用其他的组件去处理请求,则返回 false。

postHandle():这个方法在业务处理器处理完请求后,但是 DispatcherServlet向客户端返回响应前被调用,在该方法中对用户请求 request 进行处理。

afterCompletion():这个方法在 DispatcherServlet 完全处理完请求后被调用,可以 在该方法中进行一些资源清理的操作。

二、-配置步骤

1、创建一个-(实现HandlerInterceptor接口)

package com.ssm.Interceptor;

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;

//-

public class LoginInterceptor implements HandlerInterceptor {

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

//获取请求的URL

String requestURI=request.getRequestURI();

HttpSession session=request.getSession();

Object userInfo=request.getSession().getAttribute("USERINFO");

System.out.println("链接:"+requestURI+"进入-");

if(userInfo==null){ //表示未登录就想进入系统

//直接重定向到登录界面

String serverPath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/index.jsp";

response.sendRedirect(serverPath);

return false;

}else{

//登陆成功,不拦截

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("渲染后拦截");

}

}

这个-我只是写个Demo,所以只进行了是否登录的验证,真正的项目中你也可以在这里进行一些权限的判断等等。

2、配置-

由于配置了会拦截所有资源,我们必须用标签放行静态资源和一些不用拦截的请求(登录等等)。是第一步创建的-。

3、测试下-:

在地址栏输入个非法的请求试试:

通过地址栏可以看到,页面已经被重定向到了登陆界面,拦截成功。

但是-并不能拦截jsp页面的访问,这个时候两种选择:

1、将所有jsp页面都放在WEB-INF目录下

2、用Servlet过滤器(虽然感觉技术有点老了)

三、过滤器概述

Servlet过滤器主要用于对客户端(浏览器)的请求进行过滤处理,然后将过滤后的请求转交给下一资源。

四、过滤器配置步骤

1、创建一个过滤器(实现Filter接口)

package com.ssm.Filter;

import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.io.IOException;

//自定义过滤器

public class LoginFilter implements Filter {

//初始化方法

@Override

public void init(FilterConfig filterConfig) throws ServletException {

//初始化处理

System.out.println("过滤器初始化");

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

//过滤处理

//servletRequest 是个接口,HttpServletRequest 是实现,但是有些方法是HttpServletRequest独有的,如:getSession

//HttpServletRequest接口是继承servletRequest接口,增加了和http相关的方法

HttpServletRequest request= (HttpServletRequest) servletRequest;

HttpServletResponse response= (HttpServletResponse) servletResponse;

// String requestURI=request.getRequestURI();

// System.out.println("链接:"+requestURI+"进入过滤器");

HttpSession session=request.getSession();

if(session.getAttribute("USERINFO")==null){

//非法请求,直接跳转到登陆界面

String serverPath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/index.jsp";

response.sendRedirect(serverPath);

}else{

//正常登录,放行

filterChain.doFilter(request,response);

}

}

@Override

public void destroy() {

//释放资源

System.out.println("过滤器销毁");

}

}

2、配置web.xml

LoginFilter

com.ssm.Filter.LoginFilter

LoginFilter

/views/*

各个标签的解释都写在注释里面了,至于需要过滤的资源,你可以根据自己的需求再添加,我主要是想把views目录下面的jsp全部过滤。

3、测试过滤器

不登陆直接访问后台jsp页面:

访问之后:

可以看到,过滤器直接将请求重定向到了登陆界面,过滤器过滤成功。

五、总结

现在已经有了很多权限管理的框架了,Shiro、Spring Security等等,以后尽量还是用新技术。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:电商混合app开发周期(综合类电商app发展研究)
下一篇:搭建混合app开发环境(搭建混合app开发环境怎么样)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~