From 78354c793388af8be85820bfbe6b99cf20576f76 Mon Sep 17 00:00:00 2001 From: mingsoft Date: Mon, 7 Feb 2022 14:16:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mingsoft/cms/action/CategoryAction.java | 2 +- .../mingsoft/cms/action/ContentAction.java | 5 +- .../mingsoft/cms/action/GeneraterAction.java | 2 + .../cms/action/web/CategoryAction.java | 47 ++--- .../cms/action/web/ContentAction.java | 2 +- .../mingsoft/cms/action/web/MCmsAction.java | 22 +-- .../mingsoft/cms/entity/CategoryEntity.java | 12 +- .../net/mingsoft/cms/upgrade/Upgrade.java | 60 +++++++ .../java/net/mingsoft/config/WebConfig.java | 167 ++++++++++++++++++ 9 files changed, 258 insertions(+), 61 deletions(-) create mode 100644 src/main/java/net/mingsoft/cms/upgrade/Upgrade.java create mode 100644 src/main/java/net/mingsoft/config/WebConfig.java diff --git a/src/main/java/net/mingsoft/cms/action/CategoryAction.java b/src/main/java/net/mingsoft/cms/action/CategoryAction.java index aa3bb306..c843a6a2 100755 --- a/src/main/java/net/mingsoft/cms/action/CategoryAction.java +++ b/src/main/java/net/mingsoft/cms/action/CategoryAction.java @@ -54,7 +54,7 @@ import java.util.List; * 创建日期:2019-11-28 15:12:32
* 历史修订:
*/ -@Api(value = "分类接口") +@Api(tags={"后端-内容模块接口"}) @Controller("cmsCategoryAction") @RequestMapping("/${ms.manager.path}/cms/category") public class CategoryAction extends BaseAction { diff --git a/src/main/java/net/mingsoft/cms/action/ContentAction.java b/src/main/java/net/mingsoft/cms/action/ContentAction.java index a07c4747..b34ab238 100755 --- a/src/main/java/net/mingsoft/cms/action/ContentAction.java +++ b/src/main/java/net/mingsoft/cms/action/ContentAction.java @@ -20,7 +20,6 @@ */ package net.mingsoft.cms.action; -import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -34,12 +33,10 @@ import net.mingsoft.basic.util.StringUtil; import net.mingsoft.cms.bean.ContentBean; import net.mingsoft.cms.biz.ICategoryBiz; import net.mingsoft.cms.biz.IContentBiz; -import net.mingsoft.cms.constant.e.CategoryTypeEnum; import net.mingsoft.cms.entity.CategoryEntity; import net.mingsoft.cms.entity.ContentEntity; import net.mingsoft.mdiy.biz.IModelBiz; import net.mingsoft.mdiy.entity.ModelEntity; -import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -62,7 +59,7 @@ import java.util.Map; * 创建日期:2019-11-28 15:12:32
* 历史修订:
*/ -@Api(value = "文章接口") +@Api(tags={"后端-内容模块接口"}) @Controller("cmsContentAction") @RequestMapping("/${ms.manager.path}/cms/content") public class ContentAction extends BaseAction { diff --git a/src/main/java/net/mingsoft/cms/action/GeneraterAction.java b/src/main/java/net/mingsoft/cms/action/GeneraterAction.java index 56bc0eef..c64523c8 100755 --- a/src/main/java/net/mingsoft/cms/action/GeneraterAction.java +++ b/src/main/java/net/mingsoft/cms/action/GeneraterAction.java @@ -49,6 +49,7 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -64,6 +65,7 @@ import java.util.List; * @date: 2018年1月31日 下午2:52:07 * @Copyright: 2018 www.mingsoft.net Inc. All rights reserved. */ +@ApiIgnore @Controller("cmsGenerater") @RequestMapping("/${ms.manager.path}/cms/generate") @Scope("request") diff --git a/src/main/java/net/mingsoft/cms/action/web/CategoryAction.java b/src/main/java/net/mingsoft/cms/action/web/CategoryAction.java index ec6b8dc8..bf4c358d 100755 --- a/src/main/java/net/mingsoft/cms/action/web/CategoryAction.java +++ b/src/main/java/net/mingsoft/cms/action/web/CategoryAction.java @@ -20,49 +20,32 @@ */ package net.mingsoft.cms.action.web; -import java.util.List; -import java.io.File; -import java.util.ArrayList; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.alibaba.fastjson.JSON; -import net.mingsoft.base.entity.ResultData; -import org.apache.commons.lang3.StringUtils; -import org.springframework.validation.BindingResult; -import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.springframework.ui.ModelMap; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.ModelAttribute; - -import net.mingsoft.cms.biz.ICategoryBiz; -import net.mingsoft.cms.entity.CategoryEntity; -import net.mingsoft.base.util.JSONObject; -import net.mingsoft.base.entity.BaseEntity; -import net.mingsoft.basic.util.BasicUtil; -import net.mingsoft.basic.util.StringUtil; -import net.mingsoft.base.filter.DateValueFilter; -import net.mingsoft.base.filter.DoubleValueFilter; -import net.mingsoft.basic.bean.EUListBean; -import net.mingsoft.basic.annotation.LogAnn; - import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import net.mingsoft.base.entity.ResultData; +import net.mingsoft.basic.bean.EUListBean; +import net.mingsoft.basic.util.BasicUtil; +import net.mingsoft.cms.biz.ICategoryBiz; +import net.mingsoft.cms.entity.CategoryEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; /** * 分类管理控制层 * @author 铭飞开发团队 * 创建日期:2019-11-28 15:12:32
* 历史修订:
*/ -@Api(value = "分类接口") +@Api(tags={"前端-内容模块接口"}) @Controller("WebcmsCategoryAction") @RequestMapping("/cms/category") public class CategoryAction extends net.mingsoft.cms.action.BaseAction{ diff --git a/src/main/java/net/mingsoft/cms/action/web/ContentAction.java b/src/main/java/net/mingsoft/cms/action/web/ContentAction.java index c0526a76..0e0caab8 100755 --- a/src/main/java/net/mingsoft/cms/action/web/ContentAction.java +++ b/src/main/java/net/mingsoft/cms/action/web/ContentAction.java @@ -51,7 +51,7 @@ import java.util.List; * 创建日期:2019-11-28 15:12:32
* 历史修订:
*/ -@Api(value = "文章接口") +@Api(tags={"前端-内容模块接口"}) @Controller("WebcmsContentAction") @RequestMapping("/cms/content") public class ContentAction extends net.mingsoft.cms.action.BaseAction{ diff --git a/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java b/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java index 3ae1f03a..c47b0ee8 100755 --- a/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java +++ b/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java @@ -22,36 +22,26 @@ package net.mingsoft.cms.action.web; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.lang.Editor; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.PageUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import freemarker.core.ParseException; import freemarker.template.MalformedTemplateNameException; -import freemarker.template.TemplateException; import freemarker.template.TemplateNotFoundException; -import net.bytebuddy.implementation.bytecode.Throw; import net.mingsoft.base.constant.Const; import net.mingsoft.basic.exception.BusinessException; import net.mingsoft.basic.util.BasicUtil; -import net.mingsoft.basic.util.StringUtil; import net.mingsoft.cms.bean.CategoryBean; import net.mingsoft.cms.bean.ContentBean; import net.mingsoft.cms.biz.ICategoryBiz; import net.mingsoft.cms.biz.IContentBiz; -import net.mingsoft.cms.constant.e.CategoryTypeEnum; import net.mingsoft.cms.entity.CategoryEntity; import net.mingsoft.cms.entity.ContentEntity; -import net.mingsoft.cms.util.CmsParserUtil; import net.mingsoft.mdiy.bean.PageBean; import net.mingsoft.mdiy.biz.IModelBiz; import net.mingsoft.mdiy.biz.IPageBiz; import net.mingsoft.mdiy.entity.ModelEntity; import net.mingsoft.mdiy.util.ParserUtil; import org.apache.commons.lang3.StringUtils; -import org.apache.shiro.util.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; @@ -59,6 +49,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -76,6 +67,7 @@ import java.util.Map; * @date 2018年12月17日 * @date 2021年8月26日取消默认search.htm */ +@ApiIgnore @Controller("dynamicPageAction") @RequestMapping("/mcms") public class MCmsAction extends net.mingsoft.cms.action.BaseAction { @@ -571,14 +563,4 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction { } } - - public static void main(String[] args) { - - int[] a = PageUtil.rainbow(20, 30, 5); - for (int _a : a) { - System.out.println(_a); - } - - } - } diff --git a/src/main/java/net/mingsoft/cms/entity/CategoryEntity.java b/src/main/java/net/mingsoft/cms/entity/CategoryEntity.java index b38e01e2..b49806d6 100755 --- a/src/main/java/net/mingsoft/cms/entity/CategoryEntity.java +++ b/src/main/java/net/mingsoft/cms/entity/CategoryEntity.java @@ -20,9 +20,6 @@ */ package net.mingsoft.cms.entity; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; @@ -455,4 +452,13 @@ public class CategoryEntity extends BaseEntity { return categoryImg; } + @TableField(exist = false) + private String typepath; + /** + * 获取栏目图片 (标签使用) + */ + public String getTypepath() { + return categoryPath; + } + } diff --git a/src/main/java/net/mingsoft/cms/upgrade/Upgrade.java b/src/main/java/net/mingsoft/cms/upgrade/Upgrade.java new file mode 100644 index 00000000..6298db79 --- /dev/null +++ b/src/main/java/net/mingsoft/cms/upgrade/Upgrade.java @@ -0,0 +1,60 @@ +package net.mingsoft.cms.upgrade; + +import net.mingsoft.basic.util.SpringUtil; +import net.mingsoft.cms.biz.ICategoryBiz; +import net.mingsoft.cms.entity.CategoryEntity; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author by 铭飞开源团队 + * @Description + * @date 2020/6/19 15:58 + */ +public class Upgrade { + + /** + * 更新栏目分类的顶级节点和叶子节点 + */ + public void upgrade(){ + ICategoryBiz categoryBiz = SpringUtil.getBean(ICategoryBiz.class); + List list = categoryBiz.queryAll(); + + list.forEach(x->{ + + //将parentId第一行设为顶级节点 + String topId = "0"; + String parentId = x.getParentids(); + if (parentId != null) { + topId = parentId.split(",")[0]; + } + x.setTopId(topId); + + String id = x.getId(); + boolean leaf = true; + //判断是否叶子,循环查找,如果有节点的父节点中包含该节点的id则判断为否跳出循环 + for (int i = 0; i< list.size(); i++) { + String pId = list.get(i).getParentids(); + if (pId == null) { + continue; + } + leaf = !pId.contains(id); + //如果不是叶子就跳出循环,不需要再判断了 + if (!leaf) { + break; + } + } + x.setLeaf(leaf); + //更新 + Map fields = new HashMap<>(); + fields.put("leaf", x.getLeaf()?"1":"0"); + fields.put("top_id", x.getTopId()); + Map where = new HashMap<>(); + where.put("id", x.getId()); + categoryBiz.updateBySQL("cms_category", fields, where); + }); + + } +} diff --git a/src/main/java/net/mingsoft/config/WebConfig.java b/src/main/java/net/mingsoft/config/WebConfig.java new file mode 100644 index 00000000..385b45bb --- /dev/null +++ b/src/main/java/net/mingsoft/config/WebConfig.java @@ -0,0 +1,167 @@ +package net.mingsoft.config; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import net.mingsoft.basic.filter.XSSEscapeFilter; +import net.mingsoft.basic.interceptor.ActionInterceptor; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.context.request.RequestContextListener; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.io.File; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + + @Bean + public ActionInterceptor actionInterceptor() { + return new ActionInterceptor(); + } + +// @Bean +// public ConfigurationCustomizer configurationCustomizer() { +// return configuration -> configuration.setUseDeprecatedExecutor(false); +// } + // 最新版 +// @Bean +// public MybatisPlusInterceptor mybatisPlusInterceptor() { +// MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); +// interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.)); +// return interceptor; +// } + + + /** + * 增加对rest api鉴权的spring mvc拦截器 + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + // 排除配置 + registry.addInterceptor(actionInterceptor()).excludePathPatterns("/static/**", "/app/**", "/webjars/**", + "/*.html", "/*.htm"); + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + String uploadMapping = MSProperties.upload.mapping; + String uploadFloderPath = MSProperties.upload.path; + String template = MSProperties.upload.template; + String htmlDir = MSProperties.htmlDir; + registry.addResourceHandler(uploadMapping).addResourceLocations(File.separator + uploadFloderPath + File.separator, "file:" + uploadFloderPath + File.separator); + registry.addResourceHandler("/template/**").addResourceLocations(File.separator + template + File.separator, "file:" + template + File.separator); + registry.addResourceHandler("/"+htmlDir+"/**").addResourceLocations("/"+htmlDir+"/", "file:"+htmlDir+"/"); + //三种映射方式 webapp下、当前目录下、jar内 + registry.addResourceHandler("/app/**").addResourceLocations("/app/", "file:app/", "classpath:/app/"); + registry.addResourceHandler("/static/**").addResourceLocations("/static/", "file:static/", "classpath:/static/", "classpath:/META-INF/resources/"); + registry.addResourceHandler("/api/**").addResourceLocations("/api/", "file:api/", "classpath:/api/"); + if (new File(uploadFloderPath).isAbsolute()) { + //如果指定了绝对路径,上传的文件都映射到uploadMapping下 + registry.addResourceHandler(uploadMapping).addResourceLocations("file:" + uploadFloderPath + File.separator + //映射其他路径文件 + //,file:F://images + ); + } + } + + + /** + * druid数据库连接池监控 + */ + @Bean + public BeanTypeAutoProxyCreator beanTypeAutoProxyCreator() { + BeanTypeAutoProxyCreator beanTypeAutoProxyCreator = new BeanTypeAutoProxyCreator(); + beanTypeAutoProxyCreator.setTargetBeanType(DruidDataSource.class); + beanTypeAutoProxyCreator.setInterceptorNames("druidStatInterceptor"); + return beanTypeAutoProxyCreator; + } + + //XSS过滤器 + @Bean + public FilterRegistrationBean xssFilterRegistration() { + XSSEscapeFilter xssFilter = new XSSEscapeFilter(); + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setName("XSSFilter"); + registration.addUrlPatterns("/*"); + registration.setOrder(Ordered.HIGHEST_PRECEDENCE); + xssFilter.includes.add(".*/search.do"); + Map initParameters = new HashMap(); + boolean enable = true; + initParameters.put("isIncludeRichText", "false"); + registration.setInitParameters(initParameters); + registration.setFilter(xssFilter); + registration.setEnabled(enable); + return registration; + } + + /** + * RequestContextListener注册 + */ + @Bean + public ServletListenerRegistrationBean requestContextListenerRegistration() { + return new ServletListenerRegistrationBean<>(new RequestContextListener()); + } + + /** + * 设置默认首页 + */ + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/").setViewName("forward:/index"); + registry.setOrder(Ordered.HIGHEST_PRECEDENCE); + WebMvcConfigurer.super.addViewControllers(registry); + } + + + /** + * 解决com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException 问题,提交实体不存在的字段异常 + */ + @Override + public void configureMessageConverters(List> converters) { + // TODO Auto-generated method stub + converters.add(mappingJackson2HttpMessageConverter()); + WebMvcConfigurer.super.configureMessageConverters(converters); + + } + + @Bean + public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { + MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); + ObjectMapper objectMapper = new ObjectMapper(); + + //添加此配置 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + converter.setObjectMapper(objectMapper); + return converter; + } + + @Bean + public ExecutorService crawlExecutorPool() { + // 创建线程池 + ExecutorService pool = + new ThreadPoolExecutor(20, 20, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue()); + return pool; + } + + +}