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;
+ }
+
+
+}