Commit ea245913781d6abcaab5195f0d447ceb89e7e885
1 parent
2987450f
操作日志
Showing
15 changed files
with
618 additions
and
131 deletions
src/main/java/com/bsth/Application.java
| @@ -16,7 +16,7 @@ import org.springframework.context.annotation.Primary; | @@ -16,7 +16,7 @@ import org.springframework.context.annotation.Primary; | ||
| 16 | @SpringBootApplication | 16 | @SpringBootApplication |
| 17 | public class Application extends SpringBootServletInitializer { | 17 | public class Application extends SpringBootServletInitializer { |
| 18 | 18 | ||
| 19 | - public static ScheduledExecutorService mainServices = Executors.newScheduledThreadPool(11); | 19 | + public static ScheduledExecutorService mainServices = Executors.newScheduledThreadPool(12); |
| 20 | 20 | ||
| 21 | @Override | 21 | @Override |
| 22 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { | 22 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { |
src/main/java/com/bsth/ServiceStateTest.java
| @@ -3,8 +3,8 @@ package com.bsth; | @@ -3,8 +3,8 @@ package com.bsth; | ||
| 3 | public class ServiceStateTest { | 3 | public class ServiceStateTest { |
| 4 | 4 | ||
| 5 | public static void main(String[] args) { | 5 | public static void main(String[] args) { |
| 6 | - System.out.println("运营状态:" + getService(603979776)); | ||
| 7 | - System.out.println("上下行:" + getUpOrDown(603979776)); | 6 | + System.out.println("运营状态:" + getService(268435456)); |
| 7 | + System.out.println("上下行:" + getUpOrDown(268435456)); | ||
| 8 | } | 8 | } |
| 9 | 9 | ||
| 10 | /** | 10 | /** |
src/main/java/com/bsth/StartCommand.java
| @@ -23,37 +23,6 @@ public class StartCommand implements CommandLineRunner{ | @@ -23,37 +23,6 @@ public class StartCommand implements CommandLineRunner{ | ||
| 23 | @Autowired | 23 | @Autowired |
| 24 | SecurityMetadataSourceService invocationSecurityMetadataSourceService; | 24 | SecurityMetadataSourceService invocationSecurityMetadataSourceService; |
| 25 | 25 | ||
| 26 | - //public static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(8); | ||
| 27 | - | ||
| 28 | - /*@Autowired | ||
| 29 | - GpsRealDataRefreshThread gpsRefreshThread; | ||
| 30 | - @Autowired | ||
| 31 | - GetSchedulePlanThread getSchedulePlanThread; | ||
| 32 | - @Autowired | ||
| 33 | - CommonRefreshThread commonRefreshThread; | ||
| 34 | - @Autowired | ||
| 35 | - DirectivePersistenceThread directivePersistenceThread; | ||
| 36 | - @Autowired | ||
| 37 | - SchedulePersistenceThread SchedulePersistenceThread; | ||
| 38 | - @Autowired | ||
| 39 | - ArrivalThread gpsArrivalStationThread; | ||
| 40 | - @Autowired | ||
| 41 | - FirstScheduleIssuedThread firstScheduleIssuedThread; | ||
| 42 | - | ||
| 43 | - @Autowired | ||
| 44 | - DirectiveService directiveService; | ||
| 45 | - @Autowired | ||
| 46 | - DirectiveBuffer directiveBuffer; | ||
| 47 | - @Autowired | ||
| 48 | - CarConfigInfoRepository carConfigInfoRepository; | ||
| 49 | - | ||
| 50 | - @Autowired | ||
| 51 | - GpsOfflineMonitorThread gpsOfflineMonitorThread;*/ | ||
| 52 | - | ||
| 53 | - /*final static Long HOUR_TIME = 1000 * 60 * 60L; | ||
| 54 | - | ||
| 55 | - final static int HOUR_SECOND = 60 * 60;*/ | ||
| 56 | - | ||
| 57 | @Override | 26 | @Override |
| 58 | public void run(String... arg0){ | 27 | public void run(String... arg0){ |
| 59 | 28 | ||
| @@ -61,91 +30,6 @@ public class StartCommand implements CommandLineRunner{ | @@ -61,91 +30,6 @@ public class StartCommand implements CommandLineRunner{ | ||
| 61 | //启动时加载所有资源 | 30 | //启动时加载所有资源 |
| 62 | invocationSecurityMetadataSourceService.loadResourceDefine(); | 31 | invocationSecurityMetadataSourceService.loadResourceDefine(); |
| 63 | 32 | ||
| 64 | - /** | ||
| 65 | - * 车辆,设备,公司等常用的映射数据,每两小时刷新一次 | ||
| 66 | - *//* | ||
| 67 | - commonRefreshThread.start(); | ||
| 68 | - scheduler.scheduleWithFixedDelay(commonRefreshThread, HOUR_SECOND * 2 , HOUR_SECOND * 2, TimeUnit.SECONDS); | ||
| 69 | - //等映射数据加载完......睡一会吧 | ||
| 70 | - Thread.sleep(4000); | ||
| 71 | - | ||
| 72 | - *//** | ||
| 73 | - * GPS实时数据更新 线程 | ||
| 74 | - * 每8秒和网关HTTP接口同步一次 | ||
| 75 | - *//* | ||
| 76 | - scheduler.scheduleWithFixedDelay(gpsRefreshThread, 0, 8, TimeUnit.SECONDS); | ||
| 77 | - | ||
| 78 | - *//** | ||
| 79 | - * GPS 监控设备掉线行为 | ||
| 80 | - * 每分钟检测一次 | ||
| 81 | - *//* | ||
| 82 | - scheduler.scheduleWithFixedDelay(gpsOfflineMonitorThread, 60, 60, TimeUnit.SECONDS); | ||
| 83 | - | ||
| 84 | - | ||
| 85 | - *//** | ||
| 86 | - * 每天 凌晨 2 点 抓取当天实际排班 | ||
| 87 | - *//* | ||
| 88 | - //启动时先run一次 | ||
| 89 | - getSchedulePlanThread.start(); | ||
| 90 | - scheduler.scheduleAtFixedRate(getSchedulePlanThread | ||
| 91 | - , ((DateUtils.getTimesnight2() + HOUR_TIME * 2) - System.currentTimeMillis()) / 1000 | ||
| 92 | - , 60 * 60 * 24, TimeUnit.SECONDS); | ||
| 93 | - | ||
| 94 | - *//** | ||
| 95 | - * 调度指令两分钟入库一次 | ||
| 96 | - * 指令会缓存在内存,直到收到所有响应再入库 | ||
| 97 | - *//* | ||
| 98 | - //从数据库恢复初始数据 | ||
| 99 | - directiveBuffer.recovery(); | ||
| 100 | - scheduler.scheduleWithFixedDelay(directivePersistenceThread, 20, 60 * 2, TimeUnit.SECONDS); | ||
| 101 | - | ||
| 102 | - *//** | ||
| 103 | - * 每分钟将有变更的班次入库(不包括子任务) | ||
| 104 | - * 单纯为了提高 线调操作 的响应速度 | ||
| 105 | - *//* | ||
| 106 | - scheduler.scheduleWithFixedDelay(SchedulePersistenceThread, 60 * 1, 60 * 1, TimeUnit.SECONDS); | ||
| 107 | - | ||
| 108 | - *//** | ||
| 109 | - * 每15秒从数据库抓取到离站信息和班次匹配 | ||
| 110 | - * (网关生成的到离站数据也是延迟批量入库,所以缩短该线程执行周期并不会提高 “实际到离站” 的实时性) | ||
| 111 | - *//* | ||
| 112 | - scheduler.scheduleWithFixedDelay(gpsArrivalStationThread, 35, 15, TimeUnit.SECONDS); | ||
| 113 | - | ||
| 114 | - *//** | ||
| 115 | - * 首个调度指令下发(2分钟运行一次) | ||
| 116 | - * 每辆车的第一个调度指令由该线程下发 | ||
| 117 | - * 后续班次由 “实际终点到达” 事件触发指令下发 | ||
| 118 | - *//* | ||
| 119 | - scheduler.scheduleWithFixedDelay(firstScheduleIssuedThread, 60 , 60 * 2, TimeUnit.SECONDS); | ||
| 120 | - */ | ||
| 121 | - | ||
| 122 | -/* new Timer().schedule(new TimerTask() { | ||
| 123 | - | ||
| 124 | - @Override | ||
| 125 | - public void run() { | ||
| 126 | - List<CarConfigInfo> ccis = carConfigInfoRepository.findAll(); | ||
| 127 | - Cars car; | ||
| 128 | - Line line; | ||
| 129 | - String lineCode; | ||
| 130 | - System.out.println("ccis size: " + ccis.size()); | ||
| 131 | - for(CarConfigInfo cci : ccis){ | ||
| 132 | - car = cci.getCl(); | ||
| 133 | - line = cci.getXl(); | ||
| 134 | - lineCode = line.getLineCode(); | ||
| 135 | - | ||
| 136 | - String data = directiveService.createDeviceRefreshData(CommonMapped.vehicDeviceBiMap.inverse().get(car.getInsideCode()) | ||
| 137 | - , Integer.parseInt(lineCode)); | ||
| 138 | - System.out.println(data); | ||
| 139 | - int code = HttpUtils.postJson(data); | ||
| 140 | - System.out.println("车辆:" + car.getInsideCode() + "刷新线路:" + line.getLineCode()); | ||
| 141 | - code = directiveService.lineChange(car.getInsideCode(), Integer.parseInt(lineCode)); | ||
| 142 | - //directiveService.send60Phrase(car.getInsideCode(), ""); | ||
| 143 | - System.out.println("返回值:" + code); | ||
| 144 | - } | ||
| 145 | - | ||
| 146 | - } | ||
| 147 | - }, 1000 * 10);*/ | ||
| 148 | - | ||
| 149 | } catch (Exception e) { | 33 | } catch (Exception e) { |
| 150 | e.printStackTrace(); | 34 | e.printStackTrace(); |
| 151 | } | 35 | } |
src/main/java/com/bsth/WebAppConfiguration.java
| @@ -2,18 +2,21 @@ package com.bsth; | @@ -2,18 +2,21 @@ package com.bsth; | ||
| 2 | 2 | ||
| 3 | import javax.servlet.Filter; | 3 | import javax.servlet.Filter; |
| 4 | 4 | ||
| 5 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 5 | import org.springframework.boot.context.embedded.FilterRegistrationBean; | 6 | import org.springframework.boot.context.embedded.FilterRegistrationBean; |
| 6 | import org.springframework.context.annotation.Bean; | 7 | import org.springframework.context.annotation.Bean; |
| 7 | import org.springframework.context.annotation.ComponentScan; | 8 | import org.springframework.context.annotation.ComponentScan; |
| 8 | import org.springframework.context.annotation.Configuration; | 9 | import org.springframework.context.annotation.Configuration; |
| 9 | import org.springframework.web.filter.CharacterEncodingFilter; | 10 | import org.springframework.web.filter.CharacterEncodingFilter; |
| 10 | import org.springframework.web.filter.HttpPutFormContentFilter; | 11 | import org.springframework.web.filter.HttpPutFormContentFilter; |
| 12 | +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; | ||
| 11 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; | 13 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; |
| 12 | import org.springframework.web.socket.config.annotation.EnableWebSocket; | 14 | import org.springframework.web.socket.config.annotation.EnableWebSocket; |
| 13 | import org.springframework.web.socket.config.annotation.WebSocketConfigurer; | 15 | import org.springframework.web.socket.config.annotation.WebSocketConfigurer; |
| 14 | import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; | 16 | import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; |
| 15 | 17 | ||
| 16 | import com.bsth.filter.ResourceFilter; | 18 | import com.bsth.filter.ResourceFilter; |
| 19 | +import com.bsth.oplog.http.HttpOpLogInterceptor; | ||
| 17 | import com.bsth.websocket.WebSocketHandshakeInterceptor; | 20 | import com.bsth.websocket.WebSocketHandshakeInterceptor; |
| 18 | import com.bsth.websocket.handler.RealControlSocketHandler; | 21 | import com.bsth.websocket.handler.RealControlSocketHandler; |
| 19 | 22 | ||
| @@ -22,12 +25,12 @@ import com.bsth.websocket.handler.RealControlSocketHandler; | @@ -22,12 +25,12 @@ import com.bsth.websocket.handler.RealControlSocketHandler; | ||
| 22 | @ComponentScan | 25 | @ComponentScan |
| 23 | public class WebAppConfiguration extends WebMvcConfigurerAdapter implements WebSocketConfigurer{ | 26 | public class WebAppConfiguration extends WebMvcConfigurerAdapter implements WebSocketConfigurer{ |
| 24 | 27 | ||
| 28 | + @Autowired | ||
| 29 | + HttpOpLogInterceptor httpOpLogInterceptor; | ||
| 30 | + | ||
| 25 | /** | 31 | /** |
| 26 | - * | ||
| 27 | * @Title: httpPutFormContentFilter | 32 | * @Title: httpPutFormContentFilter |
| 28 | * @Description: TODO(弥补浏览器不支持PUT/DELETE,对携带 _method 参数的请求进行转换) | 33 | * @Description: TODO(弥补浏览器不支持PUT/DELETE,对携带 _method 参数的请求进行转换) |
| 29 | - * @return Filter 返回类型 | ||
| 30 | - * @throws | ||
| 31 | */ | 34 | */ |
| 32 | @Bean | 35 | @Bean |
| 33 | public Filter httpPutFormContentFilter() { | 36 | public Filter httpPutFormContentFilter() { |
| @@ -35,11 +38,8 @@ public class WebAppConfiguration extends WebMvcConfigurerAdapter implements WebS | @@ -35,11 +38,8 @@ public class WebAppConfiguration extends WebMvcConfigurerAdapter implements WebS | ||
| 35 | } | 38 | } |
| 36 | 39 | ||
| 37 | /** | 40 | /** |
| 38 | - * | ||
| 39 | * @Title: characterEncodingFilter | 41 | * @Title: characterEncodingFilter |
| 40 | * @Description: TODO(编码过滤器) | 42 | * @Description: TODO(编码过滤器) |
| 41 | - * @return Filter 返回类型 | ||
| 42 | - * @throws | ||
| 43 | */ | 43 | */ |
| 44 | @Bean | 44 | @Bean |
| 45 | public Filter characterEncodingFilter(){ | 45 | public Filter characterEncodingFilter(){ |
| @@ -50,8 +50,6 @@ public class WebAppConfiguration extends WebMvcConfigurerAdapter implements WebS | @@ -50,8 +50,6 @@ public class WebAppConfiguration extends WebMvcConfigurerAdapter implements WebS | ||
| 50 | * | 50 | * |
| 51 | * @Title: resourceFilterRegistration | 51 | * @Title: resourceFilterRegistration |
| 52 | * @Description: TODO(静态资源过滤器, 只处理 /pages 目录下的片段请求 ) | 52 | * @Description: TODO(静态资源过滤器, 只处理 /pages 目录下的片段请求 ) |
| 53 | - * @return FilterRegistrationBean 返回类型 | ||
| 54 | - * @throws | ||
| 55 | */ | 53 | */ |
| 56 | @Bean | 54 | @Bean |
| 57 | public FilterRegistrationBean resourceFilterRegistration(){ | 55 | public FilterRegistrationBean resourceFilterRegistration(){ |
| @@ -59,8 +57,18 @@ public class WebAppConfiguration extends WebMvcConfigurerAdapter implements WebS | @@ -59,8 +57,18 @@ public class WebAppConfiguration extends WebMvcConfigurerAdapter implements WebS | ||
| 59 | registration.setFilter(new ResourceFilter()); | 57 | registration.setFilter(new ResourceFilter()); |
| 60 | registration.addUrlPatterns("/pages/*"); | 58 | registration.addUrlPatterns("/pages/*"); |
| 61 | return registration; | 59 | return registration; |
| 62 | - } | ||
| 63 | - | 60 | + } |
| 61 | + | ||
| 62 | + /** | ||
| 63 | + * | ||
| 64 | + * @Title: addInterceptors | ||
| 65 | + * @Description: TODO(HTTP结构化访问日志记录 ) | ||
| 66 | + | ||
| 67 | + @Override | ||
| 68 | + public void addInterceptors(InterceptorRegistry registry) { | ||
| 69 | + registry.addInterceptor(httpOpLogInterceptor); | ||
| 70 | + }*/ | ||
| 71 | + | ||
| 64 | @Override | 72 | @Override |
| 65 | public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { | 73 | public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { |
| 66 | //线调webSocket | 74 | //线调webSocket |
src/main/java/com/bsth/data/BasicData.java
| @@ -20,6 +20,7 @@ import com.bsth.entity.Line; | @@ -20,6 +20,7 @@ import com.bsth.entity.Line; | ||
| 20 | import com.bsth.entity.Station; | 20 | import com.bsth.entity.Station; |
| 21 | import com.bsth.entity.StationRoute; | 21 | import com.bsth.entity.StationRoute; |
| 22 | import com.bsth.entity.schedule.CarConfigInfo; | 22 | import com.bsth.entity.schedule.CarConfigInfo; |
| 23 | +import com.bsth.oplog.normal.OpLogger; | ||
| 23 | import com.bsth.repository.CarParkRepository; | 24 | import com.bsth.repository.CarParkRepository; |
| 24 | import com.bsth.repository.CarsRepository; | 25 | import com.bsth.repository.CarsRepository; |
| 25 | import com.bsth.repository.LineRepository; | 26 | import com.bsth.repository.LineRepository; |
| @@ -100,6 +101,8 @@ public class BasicData implements CommandLineRunner{ | @@ -100,6 +101,8 @@ public class BasicData implements CommandLineRunner{ | ||
| 100 | @Autowired | 101 | @Autowired |
| 101 | StationRouteRepository stationRouteRepository; | 102 | StationRouteRepository stationRouteRepository; |
| 102 | 103 | ||
| 104 | + @Autowired | ||
| 105 | + OpLogger opLog; | ||
| 103 | 106 | ||
| 104 | @Override | 107 | @Override |
| 105 | public void run() { | 108 | public void run() { |
| @@ -119,6 +122,8 @@ public class BasicData implements CommandLineRunner{ | @@ -119,6 +122,8 @@ public class BasicData implements CommandLineRunner{ | ||
| 119 | 122 | ||
| 120 | loadStationRouteInfo(); | 123 | loadStationRouteInfo(); |
| 121 | logger.info("加载基础数据成功!," ); | 124 | logger.info("加载基础数据成功!," ); |
| 125 | + | ||
| 126 | + opLog.info("load_basic"); | ||
| 122 | }catch(Exception e){ | 127 | }catch(Exception e){ |
| 123 | logger.error("加载基础数据时出现异常," , e); | 128 | logger.error("加载基础数据时出现异常," , e); |
| 124 | } | 129 | } |
src/main/java/com/bsth/oplog/Level.java
0 → 100644
src/main/java/com/bsth/oplog/Log.java
0 → 100644
| 1 | +package com.bsth.oplog; | ||
| 2 | + | ||
| 3 | +import java.util.Date; | ||
| 4 | + | ||
| 5 | +public class Log { | ||
| 6 | + | ||
| 7 | + private String userName; | ||
| 8 | + | ||
| 9 | + private Long timestamp; | ||
| 10 | + | ||
| 11 | + private String type; | ||
| 12 | + | ||
| 13 | + private String level; | ||
| 14 | + | ||
| 15 | + private String path; | ||
| 16 | + | ||
| 17 | + private String serverIp; | ||
| 18 | + | ||
| 19 | + private String clientIp; | ||
| 20 | + | ||
| 21 | + private String httpData; | ||
| 22 | + | ||
| 23 | + private Date month; | ||
| 24 | + | ||
| 25 | + private String callerClass; | ||
| 26 | + | ||
| 27 | + private String callerMethod; | ||
| 28 | + | ||
| 29 | + private Integer lineNumber; | ||
| 30 | + | ||
| 31 | + public String getPath() { | ||
| 32 | + return path; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + public void setPath(String path) { | ||
| 36 | + this.path = path; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + public String getServerIp() { | ||
| 40 | + return serverIp; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + public void setServerIp(String serverIp) { | ||
| 44 | + this.serverIp = serverIp; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + public String getHttpData() { | ||
| 48 | + return httpData; | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + public void setHttpData(String httpData) { | ||
| 52 | + this.httpData = httpData; | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + public Date getMonth() { | ||
| 56 | + return month; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + public void setMonth(Date month) { | ||
| 60 | + this.month = month; | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + public String getType() { | ||
| 64 | + return type; | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + public void setType(String type) { | ||
| 68 | + this.type = type; | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + public String getLevel() { | ||
| 72 | + return level; | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + public void setLevel(String level) { | ||
| 76 | + this.level = level; | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + public String getCallerClass() { | ||
| 80 | + return callerClass; | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + public void setCallerClass(String callerClass) { | ||
| 84 | + this.callerClass = callerClass; | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + public String getCallerMethod() { | ||
| 88 | + return callerMethod; | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + public void setCallerMethod(String callerMethod) { | ||
| 92 | + this.callerMethod = callerMethod; | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + public String getClientIp() { | ||
| 96 | + return clientIp; | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + public void setClientIp(String clientIp) { | ||
| 100 | + this.clientIp = clientIp; | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + public String getUserName() { | ||
| 104 | + return userName; | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + public void setUserName(String userName) { | ||
| 108 | + this.userName = userName; | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + public Long getTimestamp() { | ||
| 112 | + return timestamp; | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + public void setTimestamp(Long timestamp) { | ||
| 116 | + this.timestamp = timestamp; | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + public Integer getLineNumber() { | ||
| 120 | + return lineNumber; | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + public void setLineNumber(Integer lineNumber) { | ||
| 124 | + this.lineNumber = lineNumber; | ||
| 125 | + } | ||
| 126 | +} |
src/main/java/com/bsth/oplog/Type.java
0 → 100644
src/main/java/com/bsth/oplog/db/DBHelper.java
0 → 100644
| 1 | +package com.bsth.oplog.db; | ||
| 2 | + | ||
| 3 | +import java.util.LinkedList; | ||
| 4 | +import java.util.concurrent.TimeUnit; | ||
| 5 | + | ||
| 6 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 7 | +import org.springframework.boot.CommandLineRunner; | ||
| 8 | +import org.springframework.stereotype.Component; | ||
| 9 | + | ||
| 10 | +import com.bsth.Application; | ||
| 11 | +import com.bsth.oplog.Log; | ||
| 12 | +import com.bsth.oplog.db.mysql.DBPersistence; | ||
| 13 | + | ||
| 14 | +//@Component | ||
| 15 | +public class DBHelper implements CommandLineRunner{ | ||
| 16 | + | ||
| 17 | + private final static int maxBufSize = 1000; | ||
| 18 | + private final static int fixedMinute = 1; | ||
| 19 | + | ||
| 20 | + private static LinkedList<Log> buffer = new LinkedList<>(); | ||
| 21 | + | ||
| 22 | + @Autowired | ||
| 23 | + private FixedTimePersistenceThread fixedTimeThread; | ||
| 24 | + | ||
| 25 | + public void save(Log log){ | ||
| 26 | + buffer.add(log); | ||
| 27 | + | ||
| 28 | + if(buffer.size() >= maxBufSize) | ||
| 29 | + fixedTimeThread.start(); | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + @Component | ||
| 33 | + public static class FixedTimePersistenceThread extends Thread{ | ||
| 34 | + | ||
| 35 | + @Autowired | ||
| 36 | + DBPersistence persistence; | ||
| 37 | + | ||
| 38 | + @Override | ||
| 39 | + public void run() { | ||
| 40 | + persistence.batchSave(buffer); | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + @Override | ||
| 45 | + public void run(String... arg0) throws Exception { | ||
| 46 | + Application.mainServices.scheduleWithFixedDelay(fixedTimeThread, fixedMinute, fixedMinute, TimeUnit.MINUTES); | ||
| 47 | + } | ||
| 48 | +} |
src/main/java/com/bsth/oplog/db/mysql/DBPersistence.java
0 → 100644
| 1 | +package com.bsth.oplog.db.mysql; | ||
| 2 | + | ||
| 3 | +import java.sql.Date; | ||
| 4 | +import java.sql.PreparedStatement; | ||
| 5 | +import java.sql.SQLException; | ||
| 6 | +import java.util.ArrayList; | ||
| 7 | +import java.util.LinkedList; | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +import org.slf4j.Logger; | ||
| 11 | +import org.slf4j.LoggerFactory; | ||
| 12 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 13 | +import org.springframework.jdbc.core.BatchPreparedStatementSetter; | ||
| 14 | +import org.springframework.jdbc.core.JdbcTemplate; | ||
| 15 | +import org.springframework.stereotype.Component; | ||
| 16 | + | ||
| 17 | +import com.bsth.oplog.Log; | ||
| 18 | + | ||
| 19 | +/** | ||
| 20 | + * | ||
| 21 | + * @ClassName: DBPersistence | ||
| 22 | + * @Description: TODO(mysql 批量入库) | ||
| 23 | + * @author PanZhao | ||
| 24 | + * @date 2016年10月20日 上午9:44:00 | ||
| 25 | + * | ||
| 26 | + */ | ||
| 27 | +@Component | ||
| 28 | +public class DBPersistence { | ||
| 29 | + | ||
| 30 | + @Autowired | ||
| 31 | + JdbcTemplate jdbcTemplate; | ||
| 32 | + | ||
| 33 | + Logger logger = LoggerFactory.getLogger(DBPersistence.class); | ||
| 34 | + | ||
| 35 | + public void batchSave(LinkedList<Log> list){ | ||
| 36 | + String sql = "insert into bsth_c_sys_op_log" | ||
| 37 | + + "(timestamp, path, type,level, caller_class, caller_method, user_name, client_ip, server_ip, month, http_data, line_number)" | ||
| 38 | + + " values(?,?,?,?,?,?,?,?,?,?,?,?)"; | ||
| 39 | + | ||
| 40 | + | ||
| 41 | + List<Log> saveList = new ArrayList<>(list.size()); | ||
| 42 | + Log log; | ||
| 43 | + while(true){ | ||
| 44 | + log = list.poll(); | ||
| 45 | + if(log != null) | ||
| 46 | + saveList.add(log); | ||
| 47 | + else | ||
| 48 | + break; | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + Date month = new Date(System.currentTimeMillis()); | ||
| 52 | + | ||
| 53 | + try { | ||
| 54 | + jdbcTemplate.batchUpdate(sql, new LogBatchPreparedStatementSetter(saveList, month)); | ||
| 55 | + } catch (Exception e) { | ||
| 56 | + logger.error("操作日志入库失败", e); | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + private class LogBatchPreparedStatementSetter implements BatchPreparedStatementSetter{ | ||
| 61 | + | ||
| 62 | + List<Log> temList; | ||
| 63 | + Date month; | ||
| 64 | + | ||
| 65 | + public LogBatchPreparedStatementSetter(final List<Log> list, Date month){ | ||
| 66 | + this.temList = list; | ||
| 67 | + this.month = month; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + @Override | ||
| 71 | + public void setValues(PreparedStatement ps, int i) throws SQLException { | ||
| 72 | + Log log = temList.get(i); | ||
| 73 | + ps.setLong(1, log.getTimestamp()); | ||
| 74 | + ps.setString(2, log.getPath()); | ||
| 75 | + ps.setString(3, log.getType()); | ||
| 76 | + ps.setString(4, log.getLevel()); | ||
| 77 | + ps.setString(5, log.getCallerClass()); | ||
| 78 | + ps.setString(6, log.getCallerMethod()); | ||
| 79 | + ps.setString(7, log.getUserName()); | ||
| 80 | + ps.setString(8, log.getClientIp()); | ||
| 81 | + ps.setString(9, log.getServerIp()); | ||
| 82 | + ps.setDate(10, month); | ||
| 83 | + ps.setString(11, log.getHttpData()); | ||
| 84 | + ps.setObject(12, log.getLineNumber()); | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + @Override | ||
| 88 | + public int getBatchSize() { | ||
| 89 | + return temList.size(); | ||
| 90 | + } | ||
| 91 | + } | ||
| 92 | +} |
src/main/java/com/bsth/oplog/db/mysql/db.sql
0 → 100644
| 1 | +CREATE TABLE `bsth_c_sys_op_log` ( | ||
| 2 | +`timestamp` bigint(20) NOT NULL , | ||
| 3 | +`user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , | ||
| 4 | +`caller_class` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , | ||
| 5 | +`caller_method` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , | ||
| 6 | +`client_ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , | ||
| 7 | +`http_data` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL , | ||
| 8 | +`level` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , | ||
| 9 | +`month` date NOT NULL , | ||
| 10 | +`path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , | ||
| 11 | +`server_ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , | ||
| 12 | +`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, | ||
| 13 | +`line_number` int(11) NULL DEFAULT NULL | ||
| 14 | +) | ||
| 15 | +ENGINE=InnoDB | ||
| 16 | +DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci | ||
| 17 | +ROW_FORMAT=DYNAMIC | ||
| 18 | + | ||
| 19 | +PARTITION BY RANGE(TO_DAYS (month)) | ||
| 20 | +( | ||
| 21 | +PARTITION p201610 VALUES LESS THAN (TO_DAYS('2016-11-01')), | ||
| 22 | +PARTITION p201611 VALUES LESS THAN (TO_DAYS('2016-12-01')), | ||
| 23 | +PARTITION p201612 VALUES LESS THAN (TO_DAYS('2017-01-01')), | ||
| 24 | + | ||
| 25 | +PARTITION p201701 VALUES LESS THAN (TO_DAYS('2017-02-01')), | ||
| 26 | +PARTITION p201702 VALUES LESS THAN (TO_DAYS('2017-03-01')), | ||
| 27 | +PARTITION p201703 VALUES LESS THAN (TO_DAYS('2017-04-01')), | ||
| 28 | +PARTITION p201704 VALUES LESS THAN (TO_DAYS('2017-05-01')), | ||
| 29 | +PARTITION p201705 VALUES LESS THAN (TO_DAYS('2017-06-01')), | ||
| 30 | +PARTITION p201706 VALUES LESS THAN (TO_DAYS('2017-07-01')), | ||
| 31 | +PARTITION p201707 VALUES LESS THAN (TO_DAYS('2017-08-01')), | ||
| 32 | +PARTITION p201708 VALUES LESS THAN (TO_DAYS('2017-09-01')), | ||
| 33 | +PARTITION p201709 VALUES LESS THAN (TO_DAYS('2017-10-01')), | ||
| 34 | +PARTITION p201710 VALUES LESS THAN (TO_DAYS('2017-11-01')), | ||
| 35 | +PARTITION p201711 VALUES LESS THAN (TO_DAYS('2017-12-01')), | ||
| 36 | +PARTITION p201712 VALUES LESS THAN (TO_DAYS('2018-01-01')), | ||
| 37 | + | ||
| 38 | + | ||
| 39 | +PARTITION p201801 VALUES LESS THAN (TO_DAYS('2018-02-01')), | ||
| 40 | +PARTITION p201802 VALUES LESS THAN (TO_DAYS('2018-03-01')), | ||
| 41 | +PARTITION p201803 VALUES LESS THAN (TO_DAYS('2018-04-01')), | ||
| 42 | +PARTITION p201804 VALUES LESS THAN (TO_DAYS('2018-05-01')), | ||
| 43 | +PARTITION p201805 VALUES LESS THAN (TO_DAYS('2018-06-01')), | ||
| 44 | +PARTITION p201806 VALUES LESS THAN (TO_DAYS('2018-07-01')), | ||
| 45 | +PARTITION p201807 VALUES LESS THAN (TO_DAYS('2018-08-01')), | ||
| 46 | +PARTITION p201808 VALUES LESS THAN (TO_DAYS('2018-09-01')), | ||
| 47 | +PARTITION p201809 VALUES LESS THAN (TO_DAYS('2018-10-01')), | ||
| 48 | +PARTITION p201810 VALUES LESS THAN (TO_DAYS('2018-11-01')), | ||
| 49 | +PARTITION p201811 VALUES LESS THAN (TO_DAYS('2018-12-01')), | ||
| 50 | +PARTITION p201812 VALUES LESS THAN (TO_DAYS('2019-01-01')), | ||
| 51 | + | ||
| 52 | +PARTITION p201901 VALUES LESS THAN (TO_DAYS('2019-02-01')), | ||
| 53 | +PARTITION p201902 VALUES LESS THAN (TO_DAYS('2019-03-01')), | ||
| 54 | +PARTITION p201903 VALUES LESS THAN (TO_DAYS('2019-04-01')), | ||
| 55 | +PARTITION p201904 VALUES LESS THAN (TO_DAYS('2019-05-01')), | ||
| 56 | +PARTITION p201905 VALUES LESS THAN (TO_DAYS('2019-06-01')), | ||
| 57 | +PARTITION p201906 VALUES LESS THAN (TO_DAYS('2019-07-01')), | ||
| 58 | +PARTITION p201907 VALUES LESS THAN (TO_DAYS('2019-08-01')), | ||
| 59 | +PARTITION p201908 VALUES LESS THAN (TO_DAYS('2019-09-01')), | ||
| 60 | +PARTITION p201909 VALUES LESS THAN (TO_DAYS('2019-10-01')), | ||
| 61 | +PARTITION p201910 VALUES LESS THAN (TO_DAYS('2019-11-01')), | ||
| 62 | +PARTITION p201911 VALUES LESS THAN (TO_DAYS('2019-12-01')), | ||
| 63 | +PARTITION p201912 VALUES LESS THAN (TO_DAYS('2020-01-01')) | ||
| 64 | + | ||
| 65 | + | ||
| 66 | +); | ||
| 67 | + |
src/main/java/com/bsth/oplog/http/HttpOpLogInterceptor.java
0 → 100644
| 1 | +package com.bsth.oplog.http; | ||
| 2 | + | ||
| 3 | +import javax.servlet.http.HttpServletRequest; | ||
| 4 | +import javax.servlet.http.HttpServletResponse; | ||
| 5 | + | ||
| 6 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 7 | +import org.springframework.stereotype.Component; | ||
| 8 | +import org.springframework.util.AntPathMatcher; | ||
| 9 | +import org.springframework.util.PathMatcher; | ||
| 10 | +import org.springframework.web.method.HandlerMethod; | ||
| 11 | +import org.springframework.web.servlet.HandlerInterceptor; | ||
| 12 | +import org.springframework.web.servlet.ModelAndView; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * | ||
| 16 | + * @ClassName: HttpOpLogger | ||
| 17 | + * @Description: TODO(HTTP 接口日志拦截器) | ||
| 18 | + * @author PanZhao | ||
| 19 | + * @date 2016年10月20日 上午12:03:11 | ||
| 20 | + * | ||
| 21 | + */ | ||
| 22 | +@Component | ||
| 23 | +public class HttpOpLogInterceptor implements HandlerInterceptor { | ||
| 24 | + | ||
| 25 | + private final PathMatcher pathMatcher = new AntPathMatcher(); | ||
| 26 | + | ||
| 27 | + // GET 白名单 | ||
| 28 | + private String[] httpGetWhiteList = { "/user/login/**", "/user/currentUser", "/dictionary/**", "/module/findByCurrentUser" }; | ||
| 29 | + | ||
| 30 | + // POST 白名单 | ||
| 31 | + private String[] httpPostWhiteList = { | ||
| 32 | + | ||
| 33 | + }; | ||
| 34 | + | ||
| 35 | + @Autowired | ||
| 36 | + HttpRecorder httpRecorder; | ||
| 37 | + | ||
| 38 | + @Override | ||
| 39 | + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3) | ||
| 40 | + throws Exception { | ||
| 41 | + | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + @Override | ||
| 45 | + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3) | ||
| 46 | + throws Exception { | ||
| 47 | + | ||
| 48 | + String method = request.getMethod(), path = request.getRequestURI(); | ||
| 49 | + // white list | ||
| 50 | + String[] whiteList = method == "GET" ? httpGetWhiteList : httpPostWhiteList; | ||
| 51 | + | ||
| 52 | + if (!isWhiteURL(whiteList, path)) | ||
| 53 | + httpRecorder.record(request, (HandlerMethod)arg2); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + @Override | ||
| 57 | + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { | ||
| 58 | + | ||
| 59 | + return true; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + private boolean isWhiteURL(String[] whiteList, String currentURL) { | ||
| 63 | + for (String whiteURL : whiteList) { | ||
| 64 | + if (pathMatcher.match(whiteURL, currentURL)) { | ||
| 65 | + return true; | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + return false; | ||
| 69 | + } | ||
| 70 | +} |
src/main/java/com/bsth/oplog/http/HttpRecorder.java
0 → 100644
| 1 | +package com.bsth.oplog.http; | ||
| 2 | + | ||
| 3 | +import java.lang.reflect.Method; | ||
| 4 | +import java.net.InetAddress; | ||
| 5 | +import java.net.UnknownHostException; | ||
| 6 | + | ||
| 7 | +import javax.servlet.http.HttpServletRequest; | ||
| 8 | + | ||
| 9 | +import org.slf4j.Logger; | ||
| 10 | +import org.slf4j.LoggerFactory; | ||
| 11 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 12 | +import org.springframework.stereotype.Component; | ||
| 13 | +import org.springframework.web.method.HandlerMethod; | ||
| 14 | + | ||
| 15 | +import com.alibaba.fastjson.JSON; | ||
| 16 | +import com.bsth.entity.sys.SysUser; | ||
| 17 | +import com.bsth.oplog.Level; | ||
| 18 | +import com.bsth.oplog.Log; | ||
| 19 | +import com.bsth.oplog.Type; | ||
| 20 | +import com.bsth.oplog.db.DBHelper; | ||
| 21 | +import com.bsth.security.util.SecurityUtils; | ||
| 22 | +import com.bsth.util.IpUtils; | ||
| 23 | + | ||
| 24 | +/** | ||
| 25 | + * | ||
| 26 | + * @ClassName: HttpRecorder | ||
| 27 | + * @Description: TODO(HTTP 日志记录器) | ||
| 28 | + * @author PanZhao | ||
| 29 | + * @date 2016年10月20日 下午12:56:56 | ||
| 30 | + * | ||
| 31 | + */ | ||
| 32 | +@Component | ||
| 33 | +public class HttpRecorder { | ||
| 34 | + | ||
| 35 | + Logger logger = LoggerFactory.getLogger(HttpRecorder.class); | ||
| 36 | + | ||
| 37 | + private final static int httpDataMaxLen = 500; | ||
| 38 | + | ||
| 39 | + @Autowired | ||
| 40 | + DBHelper persistenceBuff; | ||
| 41 | + | ||
| 42 | + public void record(HttpServletRequest request, HandlerMethod method){ | ||
| 43 | + Log log = new Log(); | ||
| 44 | + | ||
| 45 | + Type type = null; | ||
| 46 | + switch (request.getMethod()) { | ||
| 47 | + case "GET": | ||
| 48 | + type = Type.HTTP_GET; | ||
| 49 | + break; | ||
| 50 | + case "POST": | ||
| 51 | + type = Type.HTTP_POST; | ||
| 52 | + break; | ||
| 53 | + case "DELETE": | ||
| 54 | + type = Type.HTTP_DELETE; | ||
| 55 | + break; | ||
| 56 | + case "PUT": | ||
| 57 | + type = Type.HTTP_PUT; | ||
| 58 | + break; | ||
| 59 | + } | ||
| 60 | + log.setType(type.toString()); | ||
| 61 | + log.setLevel(Level.INFO.toString()); | ||
| 62 | + try { | ||
| 63 | + log.setServerIp(InetAddress.getLocalHost().getHostAddress()); | ||
| 64 | + } catch (UnknownHostException e) { | ||
| 65 | + e.printStackTrace(); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + log.setPath(request.getRequestURI()); | ||
| 69 | + //Caller | ||
| 70 | + Method refMethod = method.getMethod(); | ||
| 71 | + log.setCallerClass(refMethod.getDeclaringClass().getName()); | ||
| 72 | + log.setCallerMethod(refMethod.getName()); | ||
| 73 | + | ||
| 74 | + //Primary Key | ||
| 75 | + log.setTimestamp(System.currentTimeMillis()); | ||
| 76 | + | ||
| 77 | + SysUser user = SecurityUtils.getCurrentUser(); | ||
| 78 | + if(user != null) | ||
| 79 | + log.setUserName(user.getUserName()); | ||
| 80 | + //request | ||
| 81 | + log.setClientIp(IpUtils.getIpAddr(request)); | ||
| 82 | + log.setHttpData(httpData(request)); | ||
| 83 | + | ||
| 84 | + //save | ||
| 85 | + persistenceBuff.save(log); | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + private String httpData(HttpServletRequest request){ | ||
| 89 | + String rs = JSON.toJSONString(request.getParameterMap()); | ||
| 90 | + | ||
| 91 | + if(rs.length() > httpDataMaxLen) | ||
| 92 | + rs = rs.substring(0, httpDataMaxLen); | ||
| 93 | + | ||
| 94 | + return rs.replaceAll("\"", "‘"); | ||
| 95 | + } | ||
| 96 | +} |
src/main/java/com/bsth/oplog/normal/OpLogger.java
0 → 100644
| 1 | +package com.bsth.oplog.normal; | ||
| 2 | + | ||
| 3 | +import java.net.InetAddress; | ||
| 4 | +import java.net.UnknownHostException; | ||
| 5 | + | ||
| 6 | +import javax.servlet.http.HttpServletRequest; | ||
| 7 | + | ||
| 8 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 9 | +import org.springframework.stereotype.Component; | ||
| 10 | + | ||
| 11 | +import com.bsth.entity.sys.SysUser; | ||
| 12 | +import com.bsth.oplog.Log; | ||
| 13 | +import com.bsth.oplog.Type; | ||
| 14 | +import com.bsth.oplog.db.DBHelper; | ||
| 15 | +import com.bsth.security.util.SecurityUtils; | ||
| 16 | +import com.bsth.util.IpUtils; | ||
| 17 | + | ||
| 18 | +/** | ||
| 19 | + * | ||
| 20 | + * @ClassName: OpLogger | ||
| 21 | + * @Description: TODO(常规的操作日志记录器) | ||
| 22 | + * @author PanZhao | ||
| 23 | + * @date 2016年10月21日 上午12:52:30 | ||
| 24 | + * | ||
| 25 | + */ | ||
| 26 | +@Component | ||
| 27 | +public class OpLogger { | ||
| 28 | + | ||
| 29 | + @Autowired | ||
| 30 | + DBHelper dbHelper; | ||
| 31 | + | ||
| 32 | + public void info(String path){ | ||
| 33 | + save(getInitLog(path)); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + public void info(String path, HttpServletRequest request){ | ||
| 37 | + Log log = getInitLog(path); | ||
| 38 | + | ||
| 39 | + if(request != null){ | ||
| 40 | + SysUser user = SecurityUtils.getCurrentUser(); | ||
| 41 | + if(user != null) | ||
| 42 | + log.setUserName(user.getUserName()); | ||
| 43 | + | ||
| 44 | + log.setClientIp(IpUtils.getIpAddr(request)); | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + save(log); | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + public void info(String path, HttpServletRequest request, String description){ | ||
| 51 | + | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + public static Log getInitLog(String path){ | ||
| 55 | + Log log = new Log(); | ||
| 56 | + log.setTimestamp(System.currentTimeMillis()); | ||
| 57 | + log.setPath(path); | ||
| 58 | + log.setType(Type.NORMAL.toString()); | ||
| 59 | + | ||
| 60 | + //get caller | ||
| 61 | + StackTraceElement[] stack = (new Throwable()).getStackTrace(); | ||
| 62 | + //注意调用链的顺序,此时2为实际调用者 | ||
| 63 | + StackTraceElement caller = stack[2]; | ||
| 64 | + | ||
| 65 | + log.setCallerClass(caller.getClassName()); | ||
| 66 | + log.setCallerMethod(caller.getMethodName()); | ||
| 67 | + log.setLineNumber(caller.getLineNumber()); | ||
| 68 | + | ||
| 69 | + try { | ||
| 70 | + log.setServerIp(InetAddress.getLocalHost().getHostAddress()); | ||
| 71 | + } catch (UnknownHostException e) { | ||
| 72 | + e.printStackTrace(); | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + return log; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + public void save(Log log){ | ||
| 79 | + dbHelper.save(log); | ||
| 80 | + } | ||
| 81 | +} |
src/main/java/com/bsth/security/SecurityMetadataSourceService.java
| @@ -66,8 +66,6 @@ public class SecurityMetadataSourceService implements | @@ -66,8 +66,6 @@ public class SecurityMetadataSourceService implements | ||
| 66 | String method = invocation.getRequest().getMethod(); | 66 | String method = invocation.getRequest().getMethod(); |
| 67 | String url = method.toLowerCase() + "#" + invocation.getRequestUrl(); | 67 | String url = method.toLowerCase() + "#" + invocation.getRequestUrl(); |
| 68 | 68 | ||
| 69 | - System.out.println(url); | ||
| 70 | - | ||
| 71 | int symIndex = url.indexOf("?"); | 69 | int symIndex = url.indexOf("?"); |
| 72 | if(symIndex != -1){ | 70 | if(symIndex != -1){ |
| 73 | url = url.substring(0, symIndex); | 71 | url = url.substring(0, symIndex); |