SpringMVC配置
package com.bjdjjs.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.bjdjjs.interceptor.LogInterceptor;
/**
* 拦截器配置
* @author Administrator
*
*/
@Configuration
public class MyWebMvcConfigurer
extends WebMvcConfigurerAdapter {
@Bean
public LogInterceptor getMyInterceptor(){
return new LogInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getMyInterceptor());
super.addInterceptors(registry);
}
}
@bean为了注册拦截器,不然调用不了Service
以下为日志管理拦截器
package com.bjdjjs.interceptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.bjdjjs.domain.AuditLog;
import com.bjdjjs.domain.User;
import com.bjdjjs.enumeration.DelStatusEnum;
import com.bjdjjs.service.log.LogService;
/**
* 日志拦截器
* @author Administrator
*
*/
public class LogInterceptor implements HandlerInterceptor {
protected static Logger logger = Logger.getLogger(LogInterceptor.class);
@Autowired
private LogService logService;
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
AuditLog annotation = method.getAnnotation(AuditLog.class);
// 判断请求是否配置为进行日志记录
if (annotation != null) {
Map<String, Object> param = new HashMap<String, Object>();
//获取用户信息
User user = (User) SecurityUtils.getSubject().getPrincipal();
int userId = user.getId();
String userName = user.getName();
//获取操作对象
String operObj = annotation.operObj();
//获取操作类型
String operType = annotation.operType();
//获取用户ip地址
String ipAdress = getRequestIp(request);
//获取操作描述
String operDesc = annotation.operDesc();
if(!StringUtils.isBlank(operDesc))
param.put("operDesc", operDesc);
//状态码
param.put("status", response.getStatus());
param.put("userId", userId);
param.put("userName", userName);
param.put("ipAdress", ipAdress);
param.put("operObj", operObj);
param.put("operType", operType);
param.put("isDel", DelStatusEnum.DEFAULT.getValue());
logService.save(param);
}
}
}
/***
* 获取当前登录用户的IP地址
* @param request
*/
private String getRequestIp(HttpServletRequest request ){
String ip = request.getHeader("X-Real-IP");
if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
System.out.println("*******************************X-Real-IP"+ip+"*******************************");
return ip;
}
ip = request.getHeader("X-Forwarded-For");
if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个IP值,第一个为真实IP。
System.out.println("*******************************X-Forwarded-For"+ip+"*******************************");
int index = ip.indexOf(',');
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
} else {
System.out.println("*******************************getRemoteAddr"+request.getRemoteAddr()+"*******************************");
return request.getRemoteAddr();
}
}
}
其中AuditLog为自定义注解
package com.bjdjjs.domain;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuditLog {
/**
* 操作对象
*
* @return
*/
String operObj();
/**
* 操作类型
*
* @return
*/
String operType();
/**
* 操作描述
*
* @return
*/
String operDesc() default "";
}
将注解添加到必要的方法上,传入必要的参数即可
分享到:
相关推荐
在本项目中,我们主要探讨的是如何将SpringBoot与Mybatis进行深度整合,并实现完整的注册、登录功能,以及设置拦截器来控制权限访问。SpringBoot以其简洁的配置和快速的开发能力,配合Mybatis的灵活数据库操作,可以...
Spring Boot整合了Spring MVC,因此我们可以利用Spring MVC的拦截器来实现各种功能,如权限验证、日志记录、性能监控等。本文将详细介绍如何在Spring Boot中设置拦截器,并通过四个基本的HTTP请求方法(PUT、DELETE...
在本项目 "springboot-redisdemo" 中,我们主要关注的是如何在 SpringBoot 中整合 Redis,以及添加拦截器来增强应用程序的功能。 Redis 是一个开源的、高性能的键值数据库,适用于数据缓存、消息队列等多种场景。...
1. **CXF拦截器基础**:CXF的拦截器是基于JAX-WS规范的Handler Chain模型,分为In-bound(请求进来时触发)和Out-bound(响应出去时触发)两类。拦截器可以通过在服务配置中指定,或者通过编程方式动态添加。 2. **...
5. **CXF拦截器**:CXF拦截器是处理消息传递过程中的钩子,可以在消息发送前、发送后、接收前、接收后等阶段进行操作。在这个示例中,拦截器用于实现简单的授权校验。你可以定义一个实现了`ClientInterceptor`或`...
在SSM整合SpringBoot的过程中,我们通常会涉及到拦截器(Interceptor)、统一异常处理(Global Exception Handling)以及统一对象返回(Uniform Return Object)等关键点。 1. **SSM整合SpringBoot** 在SpringBoot...
SpringBoot整合SSM框架是将Spring、SpringMVC和MyBatis这三大流行Java开发组件融合到一起,以便简化Web应用的开发流程。...在实际开发中,还可以根据需求加入日志、权限控制、拦截器等功能,进一步完善项目架构。
在实际使用中,SpringBoot整合Dubbo增强版还可能包含一些额外的特性,如日志监控、性能指标统计、自定义拦截器等,以提升系统的可观察性和扩展性。开发者可以根据项目需求,选择合适的配置和扩展点,充分利用这套...
当我们需要在CXF和Spring整合的基础上发布Web服务,并对权限进行控制时,可以利用拦截器来实现这一目标。本文将详细介绍如何为CXF与Spring整合发布WebService添加拦截器进行权限控制。 首先,我们需要理解CXF拦截器...
SpringBoot整合Mybatis是现代Java开发中常见的技术组合,它简化了传统的Spring和Mybatis集成过程,让开发者能够快速构建微服务应用。本教程将详细阐述如何实现这一整合,并涵盖关键配置文件`application.properties`...
SpringBoot整合Shiro,可以通过定义ShiroFilterFactoryBean并配置Shiro的路径拦截规则。同时,需要创建自定义的Shiro Realm,实现用户身份验证和权限校验。Shiro Realm连接到你的数据源,如数据库,从中获取用户信息...
然后,创建资源服务器,配置必要的安全拦截器,以验证OAuth2令牌。此外,我们还需要为用户提供注册和登录界面,处理授权请求和回调。 接下来,Spring Gateway的角色是作为所有微服务的统一入口,它可以对所有请求...
Shiro通过Filter Chain定义了各种安全拦截器,例如FormAuthenticationFilter用于处理表单登录,permsFilter处理权限控制等。在SpringBoot中,可以通过WebConfig类来定制过滤器链。 ```java @Configuration @...
- 在SpringBoot中,拦截器可以与Spring MVC的拦截器一起使用,通过`@WebMvcConfigurer`或`WebMvcConfigurerAdapter`实现。 4. **分页查询**: - MyBatis提供了PageHelper插件来实现分页查询,它简化了分页逻辑。...
下面我们将详细探讨如何在SpringBoot项目中整合Mybatis,以实现创建临时表的功能。 首先,我们需要在SpringBoot项目中引入Mybatis的相关依赖。在`pom.xml`文件中,添加如下Mybatis和其Spring Boot Starter的依赖: ...
总结起来,本文主要讲解了如何在Spring Boot项目中整合Mybatis-Plus,并利用拦截器和令牌技术实现登录和首页的无拦截访问。理解这些概念和技术对于开发安全、高效的Web应用至关重要。通过对给定的代码和配置进行学习...
在SpringBoot2中整合拦截器是开发Web应用程序时的一项基础操作,它可以帮助我们对进入系统的请求进行预处理或者后处理。拦截器(HandlerInterceptor)允许我们在请求到达具体的Controller处理之前或者之后,以及完成...
在IT行业中,Spring Boot和MyBatis是两个非常重要的框架,Spring Boot简化了Spring应用程序的初始设置和配置,而...在实际项目中,还可以根据需求添加拦截器、缓存、日志等更多功能,进一步提升应用性能和可扩展性。
在实际开发中,根据项目需求,还可以进一步定制Druid的配置,比如添加数据源的动态切换、SQL拦截器等功能,以满足更加复杂的需求。同时,对于大型项目,Druid的监控功能更是不可或缺的一部分,它可以帮助我们及时...