当前位置: 首页 > news >正文

网站开发备案需要什么邢台润联科技有限公司

网站开发备案需要什么,邢台润联科技有限公司,深圳十佳设计公司排名,郑州做网站哪家好目录 一、环境说明 二、进行配置 1、pom.xml 2、log4j2.xml 3、CustomDataSourceProperties 4、ConfigReader 5、ConnectionFactory 连接工厂类#xff0c;用于管理数据库连接 三、进行简单测试配置 1、LogUtils 2、LoginUserInfoHelper 3、LoginLogUtils 4、…目录 一、环境说明      二、进行配置 1、pom.xml 2、log4j2.xml 3、CustomDataSourceProperties 4、ConfigReader 5、ConnectionFactory 连接工厂类用于管理数据库连接 三、进行简单测试配置 1、LogUtils 2、LoginUserInfoHelper 3、LoginLogUtils 4、写日志 一、环境说明      Spring Boot2MyBatis-PlusLog4j2 二、进行配置 1、pom.xml 由于Spring Boot内置的日志框架是logback会导致和log4j2冲突所以要先排除项目中logback的依赖。同时引入log4j2。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactIdexclusions !-- 去掉springboot默认配置 --exclusiongroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-logging/artifactId/exclusion/exclusions/dependencydependency !-- 引入log4j2依赖 --groupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-log4j2/artifactId/dependency 2、log4j2.xml ?xml version1.0 encodingUTF-8? !--Configuration 标签用于配置 Log4j2其中 status 属性设置为 WARN表示仅记录警告级别的日志用于运行时状态。monitorInterval 属性设置为 30表示每隔 30 秒自动检查配置文件更改。 -- Configuration statusWARN monitorInterval30Properties!--定义名为 baseDir 的属性用于指定日志文件的基本目录。其他地方可以使用 ${baseDir} 引用这个值。--Property namebaseDir./logs/Property!--定义名为 logPattern 的属性用于指定日志的格式以便在后续配置中引用。--Property namelogPattern%d{yyyy-MM-dd HH:mm:ss} %highlight{%6p} %style{%5pid}{bright,magenta} --- [%15.15t]%style{%-40.40logger{39}}{bright,cyan} : %m%n/Property!-- 文件输出的格式 --Property namefileLayout%d{yyyy-MM-dd HH:mm:ss} %p --- [%t] %logger : %m%n/Property!-- Property namelogPattern%highlight{%d{HH:mm:ss:SSS} [%-5p] - %l - %m%n}{FATALred, ERRORred, WARNyellow, INFOdefault, DEBUGdefault}/Property --!--定义名为 fileSize 的属性用于指定日志文件的最大大小。其他地方可以使用 ${fileSize} 引用这个值。--Property namefileSize10MB/Property/Properties!-- OFF 0 --!-- FATAL 100 --!-- ERROR 200 --!-- WARN 300 --!-- INFO 400 --!-- DEBUG 500 --!-- TRACE 600 --!-- ALL Integer.MAX_VALUE --CustomLevelsCustomLevel nameCUSTOM_LOG intLevel90/CustomLevel nameEXCEPTION_LOG intLevel91/CustomLevel nameOPERATION_LOG intLevel92/CustomLevel nameLOGIN_LOG intLevel93//CustomLevelsAppenders!-- Console Appender 用于将日志输出到控制台。--Console nameConsole targetSYSTEM_OUT!-- 只输出 DEBUG 级别及以上的日志 --ThresholdFilter levelDEBUG onMatchACCEPT onMismatchDENY/!-- 使用定义的日志格式 --PatternLayout pattern${logPattern}//Console!-- DEBUG 级别的日志文件输出 --RollingFile nameDebugAppender fileName${baseDir}/app_debug.logfilePattern${baseDir}/debug_%d{yyyy-MM-dd}_%i.log!-- 仅接受 DEBUG 级别的日志 --FiltersThresholdFilter levelDEBUG/ThresholdFilter levelINFO onMatchDENY onMismatchNEUTRAL//Filters!-- 使用定义的日志格式 --PatternLayout pattern${fileLayout}/Policies!-- 每隔 1 天滚动一次日志modulate 表示即使没有日志产生也会在下一天创建新文件 --TimeBasedTriggeringPolicy interval1 modulatetrue/!-- 当日志文件大小达到指定大小时触发滚动 --SizeBasedTriggeringPolicy size${fileSize}//Policies/RollingFile!-- INFO 级别的日志文件输出 --RollingFile nameInfoAppender fileName${baseDir}/app_info.logfilePattern${baseDir}/info_%d{yyyy-MM-dd}_%i.logFilters!-- 仅接受 INFO 级别的日志 --!-- onMatchACCEPT onMismatchDENY --ThresholdFilter levelINFO/ThresholdFilter levelWARN onMatchDENY onMismatchNEUTRAL//Filters!-- 使用定义的日志格式 --PatternLayout pattern${fileLayout}/Policies!-- 每隔 1 天滚动一次日志modulate 表示即使没有日志产生也会在下一天创建新文件 --TimeBasedTriggeringPolicy interval1 modulatetrue/!-- 当日志文件大小达到指定大小时触发滚动 --SizeBasedTriggeringPolicy size${fileSize}//Policies/RollingFile!--处理 WARN 级别的日志--RollingFile nameWarnAppender fileName${baseDir}/app_warn.logfilePattern${baseDir}/info_%d{yyyy-MM-dd}_%i.logFiltersThresholdFilter levelWARN/ThresholdFilter levelERROR onMatchDENY onMismatchNEUTRAL//Filters!-- 使用定义的日志格式 --PatternLayout pattern${fileLayout}/Policies!-- 每隔 1 天滚动一次日志modulate 表示即使没有日志产生也会在下一天创建新文件 --TimeBasedTriggeringPolicy interval1 modulatetrue/!-- 当日志文件大小达到指定大小时触发滚动 --SizeBasedTriggeringPolicy size${fileSize}//Policies/RollingFile!-- ERROR 级别的日志文件输出 --RollingFile nameErrorAppender fileName${baseDir}/app_error.logfilePattern${baseDir}/error_%d{yyyy-MM-dd}_%i.log!-- 仅接受 ERROR 级别的日志 --FiltersThresholdFilter levelERROR/ThresholdFilter levelFATAL onMatchDENY onMismatchNEUTRAL//Filters!-- 使用定义的日志格式 --PatternLayout pattern${fileLayout}/Policies!-- 每隔 1 天滚动一次日志modulate 表示即使没有日志产生也会在下一天创建新文件 --TimeBasedTriggeringPolicy interval1 modulatetrue/!-- 当日志文件大小达到指定大小时触发滚动 --SizeBasedTriggeringPolicy size${fileSize}//Policies/RollingFile!-- 配置 HikariSqlFile Appender将 SQL 日志输出到文件的日志记录追加器 --!-- RollingFile nameHikariSqlAppender fileName${baseDir}/app_sql.log --!-- filePattern${baseDir}/app_sql_%d{yyyy-MM-dd}_%i.log --!-- lt;!ndash; 使用定义的日志格式 ndash;gt; --!-- PatternLayout pattern${fileLayout}/ --!-- Policies --!-- lt;!ndash; 每隔 1 天滚动一次日志modulate 表示即使没有日志产生也会在下一天创建新文件 ndash;gt; --!-- TimeBasedTriggeringPolicy interval1 modulatetrue/ --!-- lt;!ndash; 当日志文件大小达到指定大小时触发滚动 ndash;gt; --!-- SizeBasedTriggeringPolicy size${fileSize}/ --!-- /Policies --!-- /RollingFile --!-- 配置JDBC Appender --!-- 登录日志表 --JDBC nameLoginDatabase tableNamesys_log_loginConnectionFactory classcom.cj.blog.common.logs.ConnectionFactory methodgetDatabaseConnection/FiltersThresholdFilter levelLOGIN_LOG/ThresholdFilter levelOPERATION_LOG onMatchDENY onMismatchNEUTRAL//FiltersColumn nameuser_id pattern%X{user_id}/Column nameuser_name pattern%X{user_name}/Column nameclient_ip pattern%X{client_ip}/Column namedevice_info pattern%X{device_info}/Column nameremarks pattern%X{remarks}/Column namelogin_time pattern%d{yyyy-MM-dd HH:mm:ss}//JDBC!-- 操作日志表 --JDBC nameOperationDatabase tableNamesys_log_operationConnectionFactory classcom.cj.blog.common.logs.ConnectionFactory methodgetDatabaseConnection/FiltersThresholdFilter levelOPERATION_LOG/ThresholdFilter levelEXCEPTION_LOG onMatchDENY onMismatchNEUTRAL//FiltersColumn nameuser_id pattern%X{user_id}/Column nameuser_name pattern%X{user_name}/Column namev_before pattern%X{v_before}/Column namev_after pattern%X{v_after}/Column nameremarks pattern%X{remarks}/Column nameoperation_time pattern%d{yyyy-MM-dd HH:mm:ss}//JDBC!-- 异常日志表 --JDBC nameExceptionDatabase tableNamesys_log_exceptionConnectionFactory classcom.cj.blog.common.logs.ConnectionFactory methodgetDatabaseConnection/FiltersThresholdFilter levelEXCEPTION_LOG/ThresholdFilter levelCUSTOM_LOG onMatchDENY onMismatchNEUTRAL//FiltersColumn nameuser_id pattern%X{user_id}/Column nameuser_name pattern%X{user_name}/Column namerequest_mode pattern%X{request_mode}/Column nameabsolute_uri pattern%X{absolute_uri}/Column nameform_data pattern%X{form_data}/Column namesource pattern%X{source}/Column namemessage pattern%X{message}/!-- Column namestack_trace pattern%X{stack_trace}/ --Column nameexception_time pattern%d{yyyy-MM-dd HH:mm:ss}//JDBC/AppendersLoggersRoot levelDEBUG!-- 控制台 --AppenderRef refConsole levelINFO/!-- 文件 --AppenderRef refErrorAppender levelERROR/AppenderRef refWarnAppender levelWARN/AppenderRef refInfoAppender levelINFO/AppenderRef refDebugAppender levelDEBUG/!-- 数据库源 --AppenderRef refLoginDatabase levelLOGIN_LOG/AppenderRef refOperationDatabase levelOPERATION_LOG/AppenderRef refExceptionDatabase levelEXCEPTION_LOG//Root!-- Logger namecom.cj.config.logs.ConnectionFactory levelINFO --!-- AppenderRef refDatabaseAppender levelINFO/ --!-- /Logger --!-- Root levelTRACE --!-- lt;!ndash; 引用控制台输出和文件输出的 appender ndash;gt; --!-- AppenderRef refConsole/ --!-- AppenderRef refDebugAppender/ --!-- AppenderRef refInfoAppender/ --!-- AppenderRef refWarnAppender/ --!-- AppenderRef refErrorAppender/ --!-- AppenderRef refLoginDatabase/ --!-- AppenderRef refOperationDatabase / --!-- lt;!ndash; AppenderRef refExceptionDatabase levelException/ ndash;gt; --!-- /Root --Logger nameorg.apache.logging.log4j levelDEBUG additivityfalseAppenderRef refConsole//Logger!--额外配置的logger--!--log4j2 自带过滤日志--!-- Apache Tomcat Web服务器配置加载的日志 --Logger nameorg.apache.catalina.startup.DigesterFactory levelERROR!-- 仅记录错误级别的日志通常用于记录严重的配置错误 --/Logger!-- 与 Apache Tomcat 相关的组件生命周期信息 --Logger nameorg.apache.catalina.util.LifecycleBase levelERROR!-- 仅记录错误级别的信息 --/Logger!-- Apache Tomcat HTTP 协议处理器的日志记录 --Logger nameorg.apache.coyote.http11.Http11NioProtocol levelWARN!-- 记录警告级别及更高级别的信息通常用于记录一般警告信息 --/Logger!-- Apache SSHDSSH Server库的日志记录 --Logger nameorg.apache.sshd.common.util.SecurityUtils levelWARN!-- 记录警告级别及更高级别的信息通常用于记录一般警告信息 --/Logger!-- 与 Apache Tomcat 相关的 NIO 选择器池的日志记录 --Logger nameorg.apache.tomcat.util.net.NioSelectorPool levelWARN!-- 记录警告级别及更高级别的信息 --/Logger!-- 与 CRaSHCommon Reusable SHell相关的库和 SSH 支持的日志记录 --Logger nameorg.crsh.plugin levelWARN!-- 记录警告级别及更高级别的信息 --/LoggerLogger nameorg.crsh.ssh levelWARN!-- 记录警告级别及更高级别的信息 --/Logger!-- Eclipse Jetty Web服务器的组件生命周期的日志记录 --Logger nameorg.eclipse.jetty.util.component.AbstractLifeCycle levelERROR!-- 仅记录错误级别的信息 --/Logger!-- Hibernate Validator相关日志 --Logger nameorg.hibernate.validator.internal.util.Version levelWARN!-- 记录警告级别及更高级别的信息 --/Logger!-- 与 Spring Boot Actuator 相关的日志记录 --Logger nameorg.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration levelWARN!-- 记录警告级别及更高级别的信息 --/LoggerLogger nameorg.springframework.boot.actuate.endpoint.jmx levelWARN!-- 记录警告级别及更高级别的信息 --/Logger!-- Thymeleaf模板引擎的日志记录 --Logger nameorg.thymeleaf levelWARN!-- 记录警告级别及更高级别的信息 --/Logger/Loggers/Configuration3、CustomDataSourceProperties import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component;Data Component ConfigurationProperties(prefix spring.datasource) Scope(singleton) public class CustomDataSourceProperties {public String url;public String username;public String password;public String driverClassName; }4、ConfigReader import com.cj.blog.model.base.CustomDataSourceProperties; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;import java.io.InputStream; import java.util.Map;/*** 用于从YAML文件中读取配置属性的实用工具类。*/ public class ConfigReader {private static final Logger logger LogManager.getLogger(ConfigReader.class);/*** 从YAML配置文件中获取数据源属性。** return CustomDataSourceProperties对象包含数据源属性如果未找到属性则返回null。*/public static CustomDataSourceProperties getDataSourceProperties() {String defaultActive dev; // 默认活动配置String defaultConfigFile /application.yml; // 默认配置文件名// 从默认配置文件中获取Spring属性MapString, Object properties getSpringProperties(defaultActive, defaultConfigFile);if (properties ! null) {MapString, Object springProperties (MapString, Object) properties.get(spring);if (springProperties ! null) {MapString, Object datasourceProperties (MapString, Object) springProperties.get(datasource);if (datasourceProperties ! null) {CustomDataSourceProperties dataSourceProperties new CustomDataSourceProperties();dataSourceProperties.setUrl((String) datasourceProperties.get(url));dataSourceProperties.setUsername((String) datasourceProperties.get(username));dataSourceProperties.setPassword((String) datasourceProperties.get(password));dataSourceProperties.setDriverClassName((String) datasourceProperties.get(driver-class-name));logger.info(获取数据源属性成功);logger.info(数据源属性 dataSourceProperties);return dataSourceProperties;}}}return null;}/*** 从指定的配置文件中获取Spring属性。** param active 要使用的活动配置。* param configFile 配置文件的路径。* return 包含Spring属性的Map如果未找到属性则返回null。*/private static MapString, Object getSpringProperties(String active, String configFile) {// 读取配置文件MapString, Object data readConfigFile(configFile);if (data ! null) {MapString, Object springProperties (MapString, Object) data.get(spring);if (springProperties ! null) {MapString, Object applicationProperties (MapString, Object) springProperties.get(profiles);if (applicationProperties ! null) {active (String) applicationProperties.get(active);System.out.println(spring.application.active: active);}}}logger.info(spring.application.active: active);// 读取活动配置的配置文件return readConfigFile(/application- active .yml);}/*** 读取指定的YAML配置文件并将其解析为Map。** param fileName YAML文件的路径。* return 包含解析后的YAML数据的Map如果未找到文件或无法解析则返回null。*/private static MapString, Object readConfigFile(String fileName) {try {// 创建用于解析YAML文件的ObjectMapper对象ObjectMapper mapper new ObjectMapper(new YAMLFactory());// 使用类加载器加载YAML文件InputStream inputStream ConfigReader.class.getResourceAsStream(fileName);// 读取YAML文件并解析为Map对象return mapper.readValue(inputStream, new TypeReferenceMapString, Object() {});} catch (Exception e) {e.printStackTrace();return null;}}}5、ConnectionFactory 连接工厂类用于管理数据库连接 import com.cj.blog.common.utils.ConfigReader; import com.cj.blog.model.base.CustomDataSourceProperties; import org.apache.commons.dbcp.DriverManagerConnectionFactory; import org.apache.commons.dbcp.PoolableConnection; import org.apache.commons.dbcp.PoolableConnectionFactory; import org.apache.commons.dbcp.PoolingDataSource; import org.apache.commons.pool.impl.GenericObjectPool; import org.springframework.stereotype.Component;import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties;/*** 连接工厂类用于管理数据库连接。通过Apache Commons DBCP提供数据库连接池功能。*/ Component public class ConnectionFactory {// 数据源用于获取数据库连接private final DataSource dataSource;/*** 构造函数初始化数据库连接池配置并创建数据源。** param dataSourceProperties 数据源属性对象包含数据库连接信息*/public ConnectionFactory(CustomDataSourceProperties dataSourceProperties) {// 初始化数据库连接池配置Properties properties new Properties();properties.setProperty(user, dataSourceProperties.getUsername());properties.setProperty(password, dataSourceProperties.getPassword());// 创建基于DriverManager的连接工厂和连接池GenericObjectPoolPoolableConnection pool new GenericObjectPool();pool.setMaxActive(10); // 设置最大连接数pool.setMinIdle(2); // 设置最小空闲连接数DriverManagerConnectionFactory connectionFactory new DriverManagerConnectionFactory(dataSourceProperties.getUrl(), properties);// 创建可池化的数据库连接工厂new PoolableConnectionFactory(connectionFactory, pool, null, SELECT 1, 3, false, false, Connection.TRANSACTION_READ_COMMITTED);// 创建数据源this.dataSource new PoolingDataSource(pool);}/*** 获取数据库连接。** return 数据库连接* throws SQLException 如果获取连接时发生错误*/public static Connection getDatabaseConnection() throws SQLException {return Singleton.INSTANCE.dataSource.getConnection();}/*** 单例类确保只有一个连接工厂实例。*/private static class Singleton {static ConnectionFactory INSTANCE;static {// TODO 这里需要修改在创建数据库连接工厂时需要从配置文件中读取数据源属性// 从配置文件中读取数据源属性并创建连接工厂实例CustomDataSourceProperties dataSourceProperties ConfigReader.getDataSourceProperties();dataSourceProperties.setDriverClassName(dataSourceProperties.getDriverClassName());dataSourceProperties.setUrl(dataSourceProperties.getUrl());dataSourceProperties.setUsername(dataSourceProperties.getUsername());dataSourceProperties.setPassword(dataSourceProperties.getPassword());INSTANCE new ConnectionFactory(dataSourceProperties);}}}三、进行简单测试配置 1、LogUtils import org.apache.logging.log4j.ThreadContext;/*** 日志工具类*/ public class LogUtils {/*** 清除登录日志上下文信息以便在日志记录操作结束后不保留上下文。*/public static void clearLogContext() {ThreadContext.clearMap();} } 2、LoginUserInfoHelper /*** 用于存储和获取用户信息的线程局部存储辅助类。*/ public class LoginUserInfoHelper {// 使用 ThreadLocal 来存储用户ID和用户名private static final ThreadLocalLong userId new ThreadLocal();private static final ThreadLocalString userName new ThreadLocal();/*** 获取当前线程的用户ID。** return 用户ID*/public static Long getUserId() {return userId.get();}/*** 设置当前线程的用户ID。** param _userId 用户ID*/public static void setUserId(Long _userId) {userId.set(_userId);}/*** 从当前线程中移除用户ID。*/public static void removeUserId() {userId.remove();}/*** 获取当前线程的用户名。** return 用户名*/public static String getUsername() {return userName.get();}/*** 设置当前线程的用户名。** param _username 用户名*/public static void setUsername(String _username) {userName.set(_username);}/*** 从当前线程中移除用户名。*/public static void removeUsername() {userName.remove();} }3、LoginLogUtils import com.cj.blog.common.utils.RequestUtils; import com.cj.blog.model.auth.LoginUserInfoHelper; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.ThreadContext;import javax.servlet.http.HttpServletRequest; import java.util.Objects; import java.util.Optional;/*** 登录日志工具类。*/ public class LoginLogUtils {private static final Logger logger LogManager.getLogger(LoginLogUtils.class);/*** 设置用户登录日志根据HttpServletRequest设置日志上下文信息。** param request 请求对象用于获取远程地址和用户代理信息。* param remarks 登录日志的备注信息。*/public static void setLogLogin(HttpServletRequest request, String remarks) {// 使用 LoginUserInfoHelper 中的用户信息设置登录日志setLogLogin(LoginUserInfoHelper.getUserId().toString(),LoginUserInfoHelper.getUsername(),request.getRemoteAddr(),RequestUtils.getUserAgent(request),remarks);}/*** 设置用户登录日志根据指定的客户端IP、设备信息和备注信息。** param clientIp 客户端IP地址。* param deviceInfo 设备信息。* param remarks 登录日志的备注信息。*/public static void setLogLogin(String clientIp, String deviceInfo, String remarks) {// 使用 LoginUserInfoHelper 中的用户信息设置登录日志setLogLogin(LoginUserInfoHelper.getUserId().toString(),LoginUserInfoHelper.getUsername(),clientIp,deviceInfo,remarks);}/*** 设置用户登录日志包含用户ID、用户名、客户端IP、设备信息和备注信息。** param userId 用户ID。* param userName 用户名。* param clientIp 客户端IP地址。* param deviceInfo 设备信息。* param remarks 登录日志的备注信息。*/public static void setLogLogin(String userId, String userName, String clientIp, String deviceInfo, String remarks) {logLogin(userId, userName, clientIp, deviceInfo, remarks);}/*** 设置用户登录日志包含用户ID、用户名、客户端IP、设备信息和备注信息。** param userId 用户ID。* param userName 用户名。* param clientIp 客户端IP地址。* param deviceInfo 设备信息。* param remarks 登录日志的备注信息。*/public static void logLogin(String userId, String userName, String clientIp, String deviceInfo, String remarks) {try {// 设置上下文信息这些信息将与日志消息关联ThreadContext.put(user_id, Objects.toString(userId, 0));ThreadContext.put(user_name, Objects.toString(userName, 0));ThreadContext.put(client_ip, clientIp);ThreadContext.put(device_info, deviceInfo);ThreadContext.put(remarks, remarks);// 使用自定义的 Login 级别记录消息logger.log(Level.getLevel(LOGIN_LOG), remarks);} finally {LogUtils.clearLogContext(); // 在try块之后清除上下文确保上下文信息不泄漏}}/*** 设置用户登录日志包含用户ID、用户名、客户端IP、设备信息和备注信息。** param clientIp 客户端IP地址。* param deviceInfo 设备信息。* param remarks 登录日志的备注信息。* param userParams 用户ID、用户名。*/public static void setLogLogin(String clientIp, String deviceInfo, String remarks, String... userParams) {String userId Optional.ofNullable(userParams.length 0 ? userParams[0] : null).orElse(0);String userName Optional.ofNullable(userParams.length 1 ? userParams[1] : null).orElse(0);try {// 设置上下文信息这些信息将与日志消息关联ThreadContext.put(user_id, userId);ThreadContext.put(user_name, userName);ThreadContext.put(client_ip, clientIp);ThreadContext.put(device_info, deviceInfo);ThreadContext.put(remarks, remarks);// 使用自定义的 Login 级别记录消息logger.log(Level.getLevel(LOGIN_LOG), remarks);} finally {LogUtils.clearLogContext(); // 在try块之后清除上下文确保上下文信息不泄漏}}}4、写日志 LoginLogUtils.setLogLogin(customUser.getSysUser().getUserId().toString(),customUser.getUsername(),request.getRemoteAddr(),RequestUtils.getUserAgent(request),登录成功);
http://www.pierceye.com/news/514207/

相关文章:

  • 东莞网站建设运营方案尺寸在线做图网站
  • 萍乡网站推广陕西省住房和城乡建设厅网站上查询
  • 南京市浦口区建设局网站多商户商城app开发
  • 网站设置不能通过链接访问中专网站建设与管理就业前景
  • 大连网站建设哪个公司好郑州最新通告
  • 如何自己搭建网站做装修的业务网站
  • app网站的优点手机自助建站永久免费
  • 搜索栏搜索网站?热?文市场调研流程
  • 外贸网站建设课本建设网站群的好处
  • 网站开发文献综述范文网络推广计划书格式
  • 有免费网站服务器吗在线美图
  • 电商网站设计的原则免费下载app软件下载大全
  • 餐饮网站建设优化建站wordpress copyright
  • 腾讯建站官网设计网页步骤
  • 网站建设三方合同范本wordpress数字链接出现404
  • 下载用的网站怎么做网站模板怎么使用教程
  • 没有网站 可以做百度口碑吗展馆的科普网站建设
  • 河北网站备案查询系统商城网站seo
  • 网站申请页面网站空间不够用怎么办
  • 网站开发最合适的搭配螺栓球网架
  • 广东网站建设排名凡科建站下载
  • 建设厅网站预算员报名时间网站建设策划书的编制
  • 厦门手机网站建设公司哪家好鲜花网站源码
  • 北京家居网站建设如何制作软件手机软件
  • 北京网站建设策划解决方案长沙建设工程造价网站
  • 北京网站设计公司价格阿里云wordpress插件
  • 网站建设自助建站企业萧山人才网手机版
  • 长沙建站挺找有为太极wordpress 需要zend
  • 通信管理局 网站备案天猫网站设计教程
  • 营销型网站制作成都打造品牌的三点策略