登录功能的拦截器实现
拦截器(Interceptor)的应用场景:
1. 权限校验
- 用户访问控制:在用户访问系统资源时,拦截器可以拦截用户请求,判断用户是否已登录、是否拥有访问该资源的权限。如果没有相应的权限,拦截器可以重定向用户到登录页面或显示错误信息。
- 角色和权限管理:在复杂的应用中,拦截器还可以根据用户的角色和权限来决定是否允许访问特定的资源或执行特定的操作。
2. 日志记录
- 请求日志:拦截器可以记录用户的请求信息,包括请求方式、请求参数、请求时间等,这些信息对于系统监控、问题排查和性能优化非常重要。
- 响应日志:同样,拦截器也可以记录响应信息,如响应状态码、响应时间和响应数据等,以便于分析系统的运行状况和用户的交互行为。
3. 性能监控
- 执行时间统计:通过拦截用户请求和响应,拦截器可以计算并记录每个请求的处理时间,从而帮助开发人员识别性能瓶颈和优化系统性能。
- 资源使用监控:拦截器还可以监控系统的资源使用情况,如CPU、内存和数据库连接等,以确保系统稳定运行并及时发现潜在问题。
4. 通用功能实现
- 字符编码统一:在Web开发中,拦截器可以统一设置请求和响应的字符编码,避免乱码问题。
- 异常处理:拦截器可以捕获并处理系统中发生的异常,确保用户得到友好的错误提示,并记录异常信息以便后续排查。
5. 数据处理
- 数据校验:在数据进入系统之前,拦截器可以对数据进行校验,确保数据的完整性和正确性。
- 数据转换:根据业务需求,拦截器还可以对数据进行格式转换或加工处理,以满足后续业务逻辑的需要。
6. 安全防护
- 防止恶意请求:拦截器可以识别并拦截恶意请求,如SQL注入、跨站脚本攻击(XSS)等,增强系统的安全性。
- 敏感信息保护:在处理敏感信息时,拦截器可以确保这些信息在传输和存储过程中得到适当的保护。
7. 框架扩展
- 自定义功能:在使用Spring MVC、Struts2等框架时,拦截器提供了一种灵活的方式来扩展框架的功能,以满足特定的业务需求。
- 拦截器链:在复杂的业务场景中,可以将多个拦截器组合成一个拦截器链,按照特定的顺序执行,以实现更复杂的业务逻辑。
定义拦截器(这里只实现了前置拦截器)
package com.hjm.interceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Object loginUser = session.getAttribute("loginUser");
if (loginUser != null){
return true;
}
request.setAttribute("msg","请先登录");
request.getRequestDispatcher("/login").forward(request,response);
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
注册拦截器
package com.hjm.config;
import com.hjm.interceptor.LoginInterceptor;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Controller
public class MyConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).
addPathPatterns("/**").excludePathPatterns("/","/login","/css/**","fonts/**","/images/**","/js/**");
}
}