From fde1079d74534e8329942df570d207373b2d038a Mon Sep 17 00:00:00 2001 From: Yaoyuan Chu Date: Sun, 27 Sep 2020 17:35:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4--=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yaoyuan/jiscuss/common/Node.java | 4 +- .../jiscuss/common/PostCommonUtil.java | 46 ++-- .../yaoyuan/jiscuss/config/MyMvcConfig.java | 1 + .../jiscuss/config/SwaggerConfiguration.java | 24 +- .../jiscuss/config/WebSecurityConfig.java | 136 ++++++------ .../jiscuss/controller/BaseController.java | 5 +- .../jiscuss/controller/TestController.java | 8 +- .../jiscuss/controller/UserMsgController.java | 2 +- .../controller/UserOtherController.java | 2 +- .../controller/UserPostController.java | 96 ++++---- .../controller/UserSystemController.java | 68 +++--- .../com/yaoyuan/jiscuss/entity/Setting.java | 16 +- .../entity/custom/DiscussionCustom.java | 8 + .../service/impl/DiscussionsServiceImpl.java | 10 +- .../service/impl/PostsServiceImpl.java | 5 +- src/main/resources/application-h2.yml | 76 +++++++ src/main/resources/application-mysql.yml | 69 ++++++ src/main/resources/application.yml | 32 ++- src/main/resources/schema.sql | 5 +- src/main/resources/static/js/user/system.js | 13 +- .../inspectionProfiles/Project_Default.xml | 36 +++ src/main/resources/templates/.idea/misc.xml | 9 + .../resources/templates/.idea/modules.xml | 8 + .../resources/templates/.idea/templates.iml | 9 + src/main/resources/templates/.idea/vcs.xml | 6 + .../resources/templates/.idea/workspace.xml | 54 +++++ src/main/resources/templates/comm/footer.ftl | 3 +- src/main/resources/templates/discussions.ftl | 11 +- src/main/resources/templates/index.ftl | 208 ++++++++++++------ src/main/resources/templates/test.ftl | 108 +++++++++ 30 files changed, 788 insertions(+), 290 deletions(-) create mode 100644 src/main/resources/application-h2.yml create mode 100644 src/main/resources/application-mysql.yml create mode 100644 src/main/resources/templates/.idea/inspectionProfiles/Project_Default.xml create mode 100644 src/main/resources/templates/.idea/misc.xml create mode 100644 src/main/resources/templates/.idea/modules.xml create mode 100644 src/main/resources/templates/.idea/templates.iml create mode 100644 src/main/resources/templates/.idea/vcs.xml create mode 100644 src/main/resources/templates/.idea/workspace.xml create mode 100644 src/main/resources/templates/test.ftl diff --git a/src/main/java/com/yaoyuan/jiscuss/common/Node.java b/src/main/java/com/yaoyuan/jiscuss/common/Node.java index e71299b..034f780 100644 --- a/src/main/java/com/yaoyuan/jiscuss/common/Node.java +++ b/src/main/java/com/yaoyuan/jiscuss/common/Node.java @@ -1,4 +1,5 @@ package com.yaoyuan.jiscuss.common; + import com.yaoyuan.jiscuss.entity.custom.PostCustom; import lombok.Data; import org.springframework.beans.BeanUtils; @@ -7,6 +8,7 @@ import javax.persistence.Column; import java.util.ArrayList; import java.util.Date; import java.util.List; + /** * @author yaoyuan2.chu * @Title: @@ -77,7 +79,7 @@ public class Node { */ public static boolean addNode(List list, Node node) { for (Node node1 : list) { //循环添加 - if (node1.getId() .equals(node.getParentId()) ) { //判断留言的上一段是都是这条留言 + if (node1.getId().equals(node.getParentId())) { //判断留言的上一段是都是这条留言 node1.getNextNodes().add(node); //是,添加,返回true; System.out.println("添加了一个"); return true; diff --git a/src/main/java/com/yaoyuan/jiscuss/common/PostCommonUtil.java b/src/main/java/com/yaoyuan/jiscuss/common/PostCommonUtil.java index b2a3f12..bdb51ce 100644 --- a/src/main/java/com/yaoyuan/jiscuss/common/PostCommonUtil.java +++ b/src/main/java/com/yaoyuan/jiscuss/common/PostCommonUtil.java @@ -30,22 +30,34 @@ public class PostCommonUtil { } String content = ""; if (mapObj.get("content") != null) { - Clob clob = (Clob) mapObj.get("content"); - content = PostCommonUtil.clobToString(clob); + if (mapObj.get("content") instanceof Clob) { + Clob clob = (Clob) mapObj.get("content"); + content = PostCommonUtil.clobToString(clob); + } else if (mapObj.get("content") instanceof String) { + content = String.valueOf(mapObj.get("content")); + } } postCustom.setContent(content); String avatar = ""; if (mapObj.get("create_avatar") != null) { - Clob clob = (Clob) mapObj.get("create_avatar"); - avatar = PostCommonUtil.clobToString(clob); + if (mapObj.get("create_avatar") instanceof Clob) { + Clob clob = (Clob) mapObj.get("create_avatar"); + avatar = PostCommonUtil.clobToString(clob); + } else if (mapObj.get("create_avatar") instanceof String) { + avatar = String.valueOf(mapObj.get("create_avatar")); + } } postCustom.setAvatar(avatar); postCustom.setUsername(mapObj.get("create_username") != null ? String.valueOf(mapObj.get("create_username")) : null); postCustom.setRealname(mapObj.get("create_realname") != null ? String.valueOf(mapObj.get("create_realname")) : null); String avatarReply = ""; if (mapObj.get("user_avatar") != null) { - Clob clob = (Clob) mapObj.get("user_avatar"); - avatarReply = PostCommonUtil.clobToString(clob); + if (mapObj.get("user_avatar") instanceof Clob) { + Clob clob = (Clob) mapObj.get("user_avatar"); + avatarReply = PostCommonUtil.clobToString(clob); + } else if (mapObj.get("user_avatar") instanceof String) { + avatarReply = String.valueOf(mapObj.get("user_avatar")); + } } postCustom.setAvatarReply(avatarReply); postCustom.setUsernameReply(mapObj.get("user_username") != null ? String.valueOf(mapObj.get("user_username")) : null); @@ -59,29 +71,29 @@ public class PostCommonUtil { public static List getNewPostsObjCustom(List postCustomList) { List mainList = new ArrayList<>(); Map postMap = new LinkedHashMap<>(); - for(PostCustom mapObj : postCustomList){ - if(null == mapObj.getParentId() ){ + for (PostCustom mapObj : postCustomList) { + if (null == mapObj.getParentId()) { mainList.add(mapObj); - }else{ + } else { List tempList = new ArrayList<>(); - if(postMap.containsKey(String.valueOf(mapObj.getParentId()))){ + if (postMap.containsKey(String.valueOf(mapObj.getParentId()))) { tempList = (List) postMap.get(String.valueOf(mapObj.getParentId())); tempList.add(mapObj); - postMap.put(String.valueOf(mapObj.getParentId()),tempList); - }else{ + postMap.put(String.valueOf(mapObj.getParentId()), tempList); + } else { tempList.add(mapObj); - postMap.put(String.valueOf(mapObj.getParentId()),tempList); + postMap.put(String.valueOf(mapObj.getParentId()), tempList); } } } List mainListResult = new ArrayList<>(); - for(PostCustom mapObj : mainList){ - if(postMap.containsKey(String.valueOf(mapObj.getId()))){ + for (PostCustom mapObj : mainList) { + if (postMap.containsKey(String.valueOf(mapObj.getId()))) { PostCustom newObj = new PostCustom(); - BeanUtils.copyProperties(mapObj , newObj); + BeanUtils.copyProperties(mapObj, newObj); newObj.setChild((List) postMap.get(String.valueOf(mapObj.getId()))); mainListResult.add(newObj); - }else{ + } else { mainListResult.add(mapObj); } } diff --git a/src/main/java/com/yaoyuan/jiscuss/config/MyMvcConfig.java b/src/main/java/com/yaoyuan/jiscuss/config/MyMvcConfig.java index f250a17..1202fa0 100644 --- a/src/main/java/com/yaoyuan/jiscuss/config/MyMvcConfig.java +++ b/src/main/java/com/yaoyuan/jiscuss/config/MyMvcConfig.java @@ -1,4 +1,5 @@ package com.yaoyuan.jiscuss.config; + import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; diff --git a/src/main/java/com/yaoyuan/jiscuss/config/SwaggerConfiguration.java b/src/main/java/com/yaoyuan/jiscuss/config/SwaggerConfiguration.java index f543347..a2ff6ea 100644 --- a/src/main/java/com/yaoyuan/jiscuss/config/SwaggerConfiguration.java +++ b/src/main/java/com/yaoyuan/jiscuss/config/SwaggerConfiguration.java @@ -15,18 +15,18 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableSwagger2 public class SwaggerConfiguration { - @Bean - public Docket createRestApi() { - return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select() - .apis(RequestHandlerSelectors.basePackage("com.yaoyuan.jiscuss.controller")).paths(PathSelectors.any()) - .build(); - } + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select() + .apis(RequestHandlerSelectors.basePackage("com.yaoyuan.jiscuss.controller")).paths(PathSelectors.any()) + .build(); + } + + @SuppressWarnings("deprecation") + private ApiInfo apiInfo() { + return new ApiInfoBuilder().title("swagger-ui RESTful APIs").description("Jiscuss") + .termsOfServiceUrl("http://localhost/").contact("developer@mail.com").version("1.0").build(); + } - @SuppressWarnings("deprecation") - private ApiInfo apiInfo() { - return new ApiInfoBuilder().title("swagger-ui RESTful APIs").description("Jiscuss") - .termsOfServiceUrl("http://localhost/").contact("developer@mail.com").version("1.0").build(); - } - } \ No newline at end of file diff --git a/src/main/java/com/yaoyuan/jiscuss/config/WebSecurityConfig.java b/src/main/java/com/yaoyuan/jiscuss/config/WebSecurityConfig.java index 22b4c14..9353eeb 100644 --- a/src/main/java/com/yaoyuan/jiscuss/config/WebSecurityConfig.java +++ b/src/main/java/com/yaoyuan/jiscuss/config/WebSecurityConfig.java @@ -15,85 +15,89 @@ import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** -prePostEnabled :决定Spring Security的前注解是否可用 [@PreAuthorize,@PostAuthorize,..] -secureEnabled : 决定是否Spring Security的保障注解 [@Secured] 是否可用 -jsr250Enabled :决定 JSR-250 annotations 注解[@RolesAllowed..] 是否可用. + * prePostEnabled :决定Spring Security的前注解是否可用 [@PreAuthorize,@PostAuthorize,..] + * secureEnabled : 决定是否Spring Security的保障注解 [@Secured] 是否可用 + * jsr250Enabled :决定 JSR-250 annotations 注解[@RolesAllowed..] 是否可用. */ @Configurable @EnableWebSecurity //开启 Spring Security 方法级安全注解 @EnableGlobalMethodSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true,securedEnabled = true,jsr250Enabled = true) -public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ +@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true) +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { - @Autowired - private CustomAccessDeniedHandler customAccessDeniedHandler; - @Qualifier("userDetailServiceImpl") - @Autowired - private UserDetailsService userDetailsService; - - /** - * 静态资源设置 - */ - @Override - public void configure(WebSecurity webSecurity) { - //不拦截静态资源,所有用户均可访问的资源 - webSecurity.ignoring().antMatchers( - "/", - "/css/**", - "/js/**", - "/images/**", - "/static/**", - "/h2-console/**", - "/druid/**" - ); - } - /** - * http请求设置 - */ - @Override - public void configure(HttpSecurity http) throws Exception { - //http.csrf().disable(); //注释就是使用 csrf 功能 - http.headers().frameOptions().disable();//解决 in a frame because it set 'X-Frame-Options' to 'DENY' 问题 - //http.anonymous().disable(); - http.authorizeRequests() - .antMatchers("/login/**","/initUserData")//不拦截登录相关方法 - .permitAll() - //.antMatchers("/user").hasRole("ADMIN") // user接口只有ADMIN角色的可以访问 + @Autowired + private CustomAccessDeniedHandler customAccessDeniedHandler; + @Qualifier("userDetailServiceImpl") + @Autowired + private UserDetailsService userDetailsService; + + /** + * 静态资源设置 + */ + @Override + public void configure(WebSecurity webSecurity) { + //不拦截静态资源,所有用户均可访问的资源 + webSecurity.ignoring().antMatchers( + "/", + "/css/**", + "/js/**", + "/images/**", + "/static/**", + "/h2-console/**", + "/test/**", + "/druid/**" + ); + } + + /** + * http请求设置 + */ + @Override + public void configure(HttpSecurity http) throws Exception { + //http.csrf().disable(); //注释就是使用 csrf 功能 + http.headers().frameOptions().disable();//解决 in a frame because it set 'X-Frame-Options' to 'DENY' 问题 + //http.anonymous().disable(); + http.authorizeRequests() + .antMatchers("/login/**", "/initUserData")//不拦截登录相关方法 + .permitAll() + //.antMatchers("/user").hasRole("ADMIN") // user接口只有ADMIN角色的可以访问 // .anyRequest() // .authenticated()// 任何尚未匹配的URL只需要验证用户即可访问 - .anyRequest() - .access("@rbacPermission.hasPermission(request, authentication)")//根据账号权限访问 - .and() - .formLogin() + .anyRequest() + .access("@rbacPermission.hasPermission(request, authentication)")//根据账号权限访问 + .and() + .formLogin() // .loginPage("/") - .loginPage("/login") //登录请求页 - .loginProcessingUrl("/login") //登录POST请求路径 - .usernameParameter("username") //登录用户名参数 - .passwordParameter("password") //登录密码参数 - .defaultSuccessUrl("/index") //默认登录成功页面 - .and() - .exceptionHandling() - .accessDeniedHandler(customAccessDeniedHandler) //无权限处理器 - .and() - .logout() - .logoutSuccessUrl("/login?logout"); //退出登录成功URL - - } - /** - * 自定义获取用户信息接口 - */ - @Override - public void configure(AuthenticationManagerBuilder auth) throws Exception { - auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); - } - - /** + .loginPage("/login") //登录请求页 + .loginProcessingUrl("/login") //登录POST请求路径 + .usernameParameter("username") //登录用户名参数 + .passwordParameter("password") //登录密码参数 + .defaultSuccessUrl("/index") //默认登录成功页面 + .and() + .exceptionHandling() + .accessDeniedHandler(customAccessDeniedHandler) //无权限处理器 + .and() + .logout() + .logoutSuccessUrl("/login?logout"); //退出登录成功URL + + } + + /** + * 自定义获取用户信息接口 + */ + @Override + public void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); + } + + /** * 密码加密算法 + * * @return */ @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); - + } } diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/BaseController.java b/src/main/java/com/yaoyuan/jiscuss/controller/BaseController.java index 33db9f0..621f0c0 100644 --- a/src/main/java/com/yaoyuan/jiscuss/controller/BaseController.java +++ b/src/main/java/com/yaoyuan/jiscuss/controller/BaseController.java @@ -20,9 +20,10 @@ public class BaseController { /** * 获取当前用户 + * * @return */ - protected UserInfo getUserInfo(HttpServletRequest request){ + protected UserInfo getUserInfo(HttpServletRequest request) { UserInfo user = null; //获得session对象 HttpSession session = request.getSession(); @@ -35,7 +36,7 @@ public class BaseController { Object spring_security_context = session.getAttribute("SPRING_SECURITY_CONTEXT"); System.out.println(spring_security_context); SecurityContext securityContext = (SecurityContext) spring_security_context; - if(securityContext!=null){ + if (securityContext != null) { //获得认证信息 Authentication authentication = securityContext.getAuthentication(); //获得用户详情 diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/TestController.java b/src/main/java/com/yaoyuan/jiscuss/controller/TestController.java index e429140..0977840 100644 --- a/src/main/java/com/yaoyuan/jiscuss/controller/TestController.java +++ b/src/main/java/com/yaoyuan/jiscuss/controller/TestController.java @@ -10,22 +10,22 @@ import org.springframework.web.bind.annotation.RequestMapping; public class TestController { - /** * 登录页面跳转 + * * @return */ @GetMapping("loginpage") public String loginpage() { - return "login"; + return "login"; } @RequestMapping("/world") public String world(Map model) { - model.put("data","2019"); + model.put("data", "2019"); // request.setAttribute("name", "xxxxxxxxx"); - model.put("msg", "xxxxxxx2222xx"); + model.put("msg", "xxxxxxx2222xx"); return "world"; } diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/UserMsgController.java b/src/main/java/com/yaoyuan/jiscuss/controller/UserMsgController.java index 85927c4..36f5094 100644 --- a/src/main/java/com/yaoyuan/jiscuss/controller/UserMsgController.java +++ b/src/main/java/com/yaoyuan/jiscuss/controller/UserMsgController.java @@ -6,7 +6,7 @@ import org.springframework.stereotype.Controller; * 用户消息控制器 */ @Controller -public class UserMsgController extends BaseController { +public class UserMsgController extends BaseController { //首页最新消息 } diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/UserOtherController.java b/src/main/java/com/yaoyuan/jiscuss/controller/UserOtherController.java index 3efc54c..d5e83f0 100644 --- a/src/main/java/com/yaoyuan/jiscuss/controller/UserOtherController.java +++ b/src/main/java/com/yaoyuan/jiscuss/controller/UserOtherController.java @@ -6,7 +6,7 @@ import org.springframework.stereotype.Controller; * 其他控制器——积分/权限等 */ @Controller -public class UserOtherController extends BaseController { +public class UserOtherController extends BaseController { //用户积分获取 } diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java b/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java index 0ea0ada..0b241da 100644 --- a/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java +++ b/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java @@ -7,8 +7,7 @@ import javax.servlet.http.HttpServletRequest; import com.yaoyuan.jiscuss.entity.*; import com.yaoyuan.jiscuss.entity.custom.DiscussionCustom; import com.yaoyuan.jiscuss.entity.custom.PostCustom; -import com.yaoyuan.jiscuss.service.IPostsService; -import com.yaoyuan.jiscuss.service.IUsersService; +import com.yaoyuan.jiscuss.service.*; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,24 +23,24 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import com.yaoyuan.jiscuss.service.IDiscussionsService; -import com.yaoyuan.jiscuss.service.ITagsService; - /** * 主题帖子评论控制器 */ @Controller -public class UserPostController extends BaseController { - - private static Logger logger = LoggerFactory.getLogger(UserPostController.class); +public class UserPostController extends BaseController { + + private static Logger logger = LoggerFactory.getLogger(UserPostController.class); @Autowired private IDiscussionsService discussionsService; - + @Autowired private ITagsService tagsService; + @Autowired + private IDiscussionsTagsService iDiscussionsTagsService; + @Autowired private IPostsService postsService; @@ -50,27 +49,26 @@ public class UserPostController extends BaseController { //首页查看主题列表(各种条件筛选,最热最新标签等) - - - //查看主题详情 + + //查看主题详情 @RequestMapping("/getdiscussionsbyid") public String getDiscussionsById(HttpServletRequest request, ModelMap map, @RequestParam("id") Integer id) { - logger.info(">>> getDiscussionsById{}",id); + logger.info(">>> getDiscussionsById{}", id); Discussion discussion = discussionsService.findOne(id); // 获取此主题下的评论 List posts = postsService.findOneBy(id); DiscussionCustom newdd = new DiscussionCustom(); - BeanUtils.copyProperties(discussion , newdd); - if (null != newdd.getStartUserId()){ + BeanUtils.copyProperties(discussion, newdd); + if (null != newdd.getStartUserId()) { User startUser = usersService.findOne(newdd.getStartUserId()); newdd.setAvatar(startUser.getAvatar()); newdd.setRealname(startUser.getRealname()); newdd.setUsername(startUser.getUsername()); } - if (null != newdd.getLastUserId()){ + if (null != newdd.getLastUserId()) { User lastUser = usersService.findOne(newdd.getLastUserId()); newdd.setAvatarLast(lastUser.getAvatar()); newdd.setRealnameLast(lastUser.getRealname()); @@ -87,37 +85,53 @@ public class UserPostController extends BaseController { map.put("discussions", newdd); map.put("posts", postsObj); UserInfo user = getUserInfo(request); - if(user != null){ + if (user != null) { map.put("username", user.getUsername()); } return "discussions"; } - //新建主题 @PostMapping(value = "/newdiscussions") @ResponseBody - public String newDiscussions(@RequestBody Discussion discussion) { - logger.info(">>> newPost"+ discussion); + public String newDiscussions(@RequestBody DiscussionCustom discussion) { + logger.info(">>> newPost" + discussion); - ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletRequestAttributes.getRequest(); UserInfo user = getUserInfo(request); - if(user != null){ - discussion.setLastUserId( user.getId()); - discussion.setCreateId( user.getId()); + if (user != null) { + discussion.setStartUserId(user.getId()); + discussion.setLastUserId(user.getId()); + discussion.setCreateId(user.getId()); } + + discussion.setCreateTime(new Date()); - + discussion.setStartTime(new Date()); + discussion.setLastTime(new Date()); + Discussion saveDiscussion = discussionsService.insert(discussion); + + if (null != discussion.getTag()) { + //执行组装标签 + String[] strArray = discussion.getTag().split(","); + for(String str : strArray){ + DiscussionTag dtag= new DiscussionTag(); + dtag.setDiscussionId(saveDiscussion.getId()); + dtag.setTagId(Integer.parseInt(str)); + iDiscussionsTagsService.insert(dtag); + } + } + JSONObject resultobj = new JSONObject(); - + logger.info(">>>{}", saveDiscussion); resultobj.put("msg", "添加成功"); resultobj.put("flag", true); return resultobj.toString(); // - + } @@ -129,18 +143,18 @@ public class UserPostController extends BaseController { @PostMapping(value = "/newpost") @ResponseBody public String newPosts(@RequestBody Post post) { - logger.info(">>> newpost"+ post); + logger.info(">>> newpost" + post); - ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletRequestAttributes.getRequest(); UserInfo user = getUserInfo(request); - if(user != null){ - post.setCreateId( user.getId()); + if (user != null) { + post.setCreateId(user.getId()); } post.setCreateTime(new Date()); - if(null != post.getParentId()){ - Post temp =postsService.findOneByid(post.getParentId()); + if (null != post.getParentId()) { + Post temp = postsService.findOneByid(post.getParentId()); post.setUserId(temp.getCreateId()); } @@ -148,37 +162,37 @@ public class UserPostController extends BaseController { Post savePost = postsService.insert(post); JSONObject resultobj = new JSONObject(); - logger.info(">>>{}",savePost ); + logger.info(">>>{}", savePost); resultobj.put("msg", "添加成功"); resultobj.put("flag", true); return resultobj.toString(); // } //删除评论 - + //新建标签 @PostMapping(value = "/newtags") @ResponseBody public String newTags(@RequestBody Tag tag) { - logger.info(">>> newTags"+ tag); + logger.info(">>> newTags" + tag); - ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletRequestAttributes.getRequest(); UserInfo user = getUserInfo(request); - if(user != null){ - tag.setCreateId( user.getId()); + if (user != null) { + tag.setCreateId(user.getId()); } tag.setCreateTime(new Date()); Tag saveTag = tagsService.insert(tag); JSONObject resultobj = new JSONObject(); - + logger.info(">>>{}", saveTag); resultobj.put("msg", "添加成功"); resultobj.put("flag", true); return resultobj.toString(); // - + } //排行榜等 diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/UserSystemController.java b/src/main/java/com/yaoyuan/jiscuss/controller/UserSystemController.java index bdd1305..6702928 100644 --- a/src/main/java/com/yaoyuan/jiscuss/controller/UserSystemController.java +++ b/src/main/java/com/yaoyuan/jiscuss/controller/UserSystemController.java @@ -37,50 +37,50 @@ public class UserSystemController extends BaseController { @Autowired private IDiscussionsService discussionsService; - + @Autowired private ITagsService tagsService; //首页 - @RequestMapping({"/","/main","/index"}) - public String home(@RequestParam(defaultValue = "all") String tag, @RequestParam(defaultValue = "all") String type,@RequestParam(defaultValue = "1") Integer + @RequestMapping({"/", "/main", "/index"}) + public String home(@RequestParam(defaultValue = "all") String tag, @RequestParam(defaultValue = "all") String type, @RequestParam(defaultValue = "1") Integer pageNum, HttpServletRequest request, ModelMap map) { logger.info(">>> index"); logger.info(">>> tag:" + tag); logger.info(">>> pageNum:" + pageNum); List userall = usersService.getAllList(); - logger.info(">>> 第一遍的全部用户:"+userall); - + logger.info(">>> 第一遍的全部用户:" + userall); + List useral2 = usersService.getAllList(); - logger.info(">>> 第二遍的全部用户:"+useral2); + logger.info(">>> 第二遍的全部用户:" + useral2); int pageSiz = 10; int pageNumNew = pageNum - 1; Discussion discussion = new Discussion(); //分页获取主题帖子 - Page allDiscussionsPage = discussionsService.queryAllDiscussionsList(discussion,pageNumNew,pageSiz); - + Page allDiscussionsPage = discussionsService.queryAllDiscussionsList(discussion, pageNumNew, pageSiz); + List allDiscussions = allDiscussionsPage.getContent(); List newAllD = new ArrayList<>(); - for (Discussion dd : allDiscussions){ + for (Discussion dd : allDiscussions) { DiscussionCustom newdd = new DiscussionCustom(); - BeanUtils.copyProperties(dd , newdd); + BeanUtils.copyProperties(dd, newdd); String newCon = ""; String content = DelTagsUtil.getTextFromHtml(newdd.getContent()); - if(null != content && content.length()>30){ - newCon = content.substring(0,29); - }else{ + if (null != content && content.length() > 30) { + newCon = content.substring(0, 29); + } else { newCon = content; } newdd.setContent(newCon); - if (null != newdd.getStartUserId()){ + if (null != newdd.getStartUserId()) { User startUser = usersService.findOne(newdd.getStartUserId()); newdd.setAvatar(startUser.getAvatar()); newdd.setRealname(startUser.getRealname()); newdd.setUsername(startUser.getUsername()); } - if (null != newdd.getLastUserId()){ + if (null != newdd.getLastUserId()) { User lastUser = usersService.findOne(newdd.getLastUserId()); newdd.setAvatarLast(lastUser.getAvatar()); newdd.setRealnameLast(lastUser.getRealname()); @@ -89,18 +89,18 @@ public class UserSystemController extends BaseController { newAllD.add(newdd); } - - logger.info("全部主题==>:{}",allDiscussions); + + logger.info("全部主题==>:{}", allDiscussions); Long total = allDiscussionsPage.getTotalElements(); - + //获取主题帖子的分页数据 - List pageNumList = getPageNumList(allDiscussionsPage.getTotalPages()); + List pageNumList = getPageNumList(allDiscussionsPage.getTotalPages()); //获取所有标签(以后尝试去缓存中取) List allTags = tagsService.getAllList(); - logger.info("全部标签==>:{}",allTags); - + logger.info("全部标签==>:{}", allTags); + System.out.println(userall.toString()); map.put("data", "Jiscuss 用户"); map.put("allDiscussions", newAllD); @@ -109,32 +109,38 @@ public class UserSystemController extends BaseController { map.put("tag", tag); map.put("type", type); - map.put("pageSize",pageSiz); + map.put("pageSize", pageSiz); map.put("pageTotal", total); map.put("pageNum", pageNum); map.put("pageTotalPages", allDiscussionsPage.getTotalPages()); UserInfo user = getUserInfo(request); - if(user != null){ + if (user != null) { map.put("username", user.getUsername()); map.put("data", "Jiscuss 用户:" + user.getUsername()); } return "index"; } - - private List getPageNumList(int size) { - List pageNumList = new ArrayList(); - for(int i = 0;i getPageNumList(int size) { + List pageNumList = new ArrayList(); + for (int i = 0; i < size; i++) { + pageNumList.add("" + (i + 1)); } - return pageNumList; - } + return pageNumList; + } + + //登录页 + @GetMapping("/test") + public String test() { + return "test"; + } //登录页 @GetMapping("/login") public String login(@RequestParam(value = "error", required = false) String error, - @RequestParam(value = "logout", required = false) String logout,ModelMap map) { + @RequestParam(value = "logout", required = false) String logout, ModelMap map) { if (error != null) { map.put("msg", "您输入的用户名密码错误!"); return "login"; diff --git a/src/main/java/com/yaoyuan/jiscuss/entity/Setting.java b/src/main/java/com/yaoyuan/jiscuss/entity/Setting.java index 1020e35..7c463ac 100644 --- a/src/main/java/com/yaoyuan/jiscuss/entity/Setting.java +++ b/src/main/java/com/yaoyuan/jiscuss/entity/Setting.java @@ -2,10 +2,7 @@ package com.yaoyuan.jiscuss.entity; import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import javax.persistence.*; import lombok.Data; @@ -19,9 +16,12 @@ public class Setting implements Serializable{ private static final long serialVersionUID = 1L; @Id - @Column(name="key") - private String key; + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name="setting_key") + private String settingKey; - @Column(name="value") - private String value; + @Column(name="setting_value") + private String settingValue; } diff --git a/src/main/java/com/yaoyuan/jiscuss/entity/custom/DiscussionCustom.java b/src/main/java/com/yaoyuan/jiscuss/entity/custom/DiscussionCustom.java index 017343d..f3beb41 100644 --- a/src/main/java/com/yaoyuan/jiscuss/entity/custom/DiscussionCustom.java +++ b/src/main/java/com/yaoyuan/jiscuss/entity/custom/DiscussionCustom.java @@ -1,8 +1,11 @@ package com.yaoyuan.jiscuss.entity.custom; import com.yaoyuan.jiscuss.entity.Discussion; +import com.yaoyuan.jiscuss.entity.Tag; import lombok.Data; +import java.util.List; + /** * @author yaoyuan2.chu * @Title: @@ -26,4 +29,9 @@ public class DiscussionCustom extends Discussion { private String realnameLast; + private String tag; + + private List tagList; + + } diff --git a/src/main/java/com/yaoyuan/jiscuss/service/impl/DiscussionsServiceImpl.java b/src/main/java/com/yaoyuan/jiscuss/service/impl/DiscussionsServiceImpl.java index acde7fe..5d01d92 100644 --- a/src/main/java/com/yaoyuan/jiscuss/service/impl/DiscussionsServiceImpl.java +++ b/src/main/java/com/yaoyuan/jiscuss/service/impl/DiscussionsServiceImpl.java @@ -36,14 +36,14 @@ public class DiscussionsServiceImpl implements IDiscussionsService { return discussionsRepository.getOne(id); } - @Override - public Page queryAllDiscussionsList(Discussion discussion, int pageNum, int pageSize) { - Sort sort=new Sort(Sort.Direction.DESC,"id"); + @Override + public Page queryAllDiscussionsList(Discussion discussion, int pageNum, int pageSize) { + Sort sort = new Sort(Sort.Direction.DESC, "id"); @SuppressWarnings("deprecation") - Pageable pageable=new PageRequest(pageNum,pageSize,sort); + Pageable pageable = new PageRequest(pageNum, pageSize, sort); //将匹配对象封装成Example对象 Example example = Example.of(discussion); - return discussionsRepository.findAll(example,pageable); + return discussionsRepository.findAll(example, pageable); } } diff --git a/src/main/java/com/yaoyuan/jiscuss/service/impl/PostsServiceImpl.java b/src/main/java/com/yaoyuan/jiscuss/service/impl/PostsServiceImpl.java index 9ff1a8a..95a3595 100644 --- a/src/main/java/com/yaoyuan/jiscuss/service/impl/PostsServiceImpl.java +++ b/src/main/java/com/yaoyuan/jiscuss/service/impl/PostsServiceImpl.java @@ -42,7 +42,7 @@ public class PostsServiceImpl implements IPostsService { @Override public Post findOneByid(Integer id) { - Post post =new Post(); + Post post = new Post(); post.setId(id); Example example = Example.of(post); Optional postRes = postsRepository.findOne(example); @@ -66,7 +66,6 @@ public class PostsServiceImpl implements IPostsService { // List thenpostCustomListNew = PostCommonUtil.getNewPostsObjCustom(thenpostCustomList); - //新建一个Node集合。 ArrayList nodes = new ArrayList<>(); //将第一层评论都添加都Node集合中 @@ -82,8 +81,6 @@ public class PostsServiceImpl implements IPostsService { Node.show(list); - - // List> posts = postsRepository.findPostCustomById(id); // // List postCustomList = PostCommonUtil.getNewPostsObjMap(posts); diff --git a/src/main/resources/application-h2.yml b/src/main/resources/application-h2.yml new file mode 100644 index 0000000..e8381b0 --- /dev/null +++ b/src/main/resources/application-h2.yml @@ -0,0 +1,76 @@ +#h2 配置 +spring: + cache: + type: ehcache + ehcache: + config: classpath:ehcache.xml + jpa: + generate-ddl: false + show-sql: true + hibernate: + ddl-auto: none + h2: + console: + path: /h2-console + enabled: true + settings: + web-allow-others: true + datasource: + platform: h2 + url: jdbc:h2:~/testjiscuss + username: sa + password: + schema: classpath:schema.sql + data: classpath:data.sql + driver-class-name: org.h2.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + min-idle: 2 + initial-size: 5 + max-active: 10 + max-wait: 5000 + validation-query: select 1SS + # 状态监控 + filter: + stat: + enabled: true + db-type: h2 + log-slow-sql: true + slow-sql-millis: 2000 + # 监控过滤器 + web-stat-filter: + enabled: true + exclusions: + - "*.js" + - "*.gif" + - "*.jpg" + - "*.png" + - "*.css" + - "*.ico" + - "/druid/*" + # druid 监控页面 + stat-view-servlet: + enabled: true + url-pattern: /druid/* +# reset-enable: false +# login-username: root +# login-password: root + freemarker: + # 设置模板后缀名 + suffix: .ftl + # 设置文档类型 + content-type: text/html + # 设置页面编码格式 + charset: UTF-8 + # 设置页面缓存 + cache: false + # 设置ftl文件路径 + template-loader-path: + - classpath:/templates + settings: + classic_compatible: true + # 设置静态文件路径,js,css等 + mvc: + static-path-pattern: /static/** +server: + port: 80 \ No newline at end of file diff --git a/src/main/resources/application-mysql.yml b/src/main/resources/application-mysql.yml new file mode 100644 index 0000000..f4c5a84 --- /dev/null +++ b/src/main/resources/application-mysql.yml @@ -0,0 +1,69 @@ +#mysql 配置 +spring: + cache: + type: ehcache + ehcache: + config: classpath:ehcache.xml + jpa: + database: MYSQL + show-sql: true + hibernate: + ddl-auto: update + datasource: + url: jdbc:mysql://127.0.0.1:3306/jiscuss?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + tomcat: + init-s-q-l: SET NAMES utf8mb4 + druid: + min-idle: 2 + initial-size: 5 + max-active: 10 + max-wait: 5000 + validation-query: select 1SS + # 状态监控 + filter: + stat: + enabled: true + db-type: mysql + log-slow-sql: true + slow-sql-millis: 2000 + # 监控过滤器 + web-stat-filter: + enabled: true + exclusions: + - "*.js" + - "*.gif" + - "*.jpg" + - "*.png" + - "*.css" + - "*.ico" + - "/druid/*" + # druid 监控页面 + stat-view-servlet: + enabled: true + url-pattern: /druid/* + # reset-enable: false + # login-username: root + # login-password: root + freemarker: + # 设置模板后缀名 + suffix: .ftl + # 设置文档类型 + content-type: text/html + # 设置页面编码格式 + charset: UTF-8 + # 设置页面缓存 + cache: false + # 设置ftl文件路径 + template-loader-path: + - classpath:/templates + settings: + classic_compatible: true + # 设置静态文件路径,js,css等 + mvc: + static-path-pattern: /static/** +server: + port: 80 \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index b43c685..fde8d5c 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,28 +1,22 @@ +#mysql 配置 spring: cache: type: ehcache ehcache: config: classpath:ehcache.xml jpa: - generate-ddl: false + database: MYSQL show-sql: true hibernate: - ddl-auto: none - h2: - console: - path: /h2-console - enabled: true - settings: - web-allow-others: true + ddl-auto: update datasource: - platform: h2 - url: jdbc:h2:~/testjiscuss - username: sa - password: - schema: classpath:schema.sql - data: classpath:data.sql - driver-class-name: org.h2.Driver + url: jdbc:mysql://127.0.0.1:3306/jiscuss?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&autoReconnect=true&useSSL=false + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource + tomcat: + init-s-q-l: SET NAMES utf8mb4 druid: min-idle: 2 initial-size: 5 @@ -33,7 +27,7 @@ spring: filter: stat: enabled: true - db-type: h2 + db-type: mysql log-slow-sql: true slow-sql-millis: 2000 # 监控过滤器 @@ -51,9 +45,9 @@ spring: stat-view-servlet: enabled: true url-pattern: /druid/* -# reset-enable: false -# login-username: root -# login-password: root + # reset-enable: false + # login-username: root + # login-password: root freemarker: # 设置模板后缀名 suffix: .ftl diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 94a79c9..3b7a6b6 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -67,8 +67,9 @@ create_time datetime -- 设置表5 drop table if exists setting; CREATE TABLE setting( -key varchar(20) primary key, -value text +id INTEGER not null primary key auto_increment , +setting_key varchar(20) , +setting_value text ); -- 标签表6 drop table if exists tag; diff --git a/src/main/resources/static/js/user/system.js b/src/main/resources/static/js/user/system.js index 321e5b6..8d0fbdd 100644 --- a/src/main/resources/static/js/user/system.js +++ b/src/main/resources/static/js/user/system.js @@ -63,6 +63,7 @@ $("#newdiscussions").click(function(){ console.warn(header) console.warn(token) var title = $("#discussionstitle").val(); + var tag = $("#selectTag").val(); // $("#discussionscontent").val(); console.log(tinyMCE.editors[0].getContent()); var content =tinyMCE.editors[0].getContent(); @@ -107,7 +108,16 @@ $("#commitnewtags").click(function(){ var header = $("meta[name='_csrf_header']").attr("content"); var token =$("meta[name='_csrf']").attr("content"); + + var name = $("#tagsname").val(); + + var tagColor = $("#tagColor").val(); + var tagIcon = $("#tagIcon").val(); + var parentTag = $("#parentTag").val(); + console.log(tagColor); + console.log(tagIcon); + console.log(parentTag); console.log(name); $.ajax({ type: "POST", @@ -124,10 +134,9 @@ $("#commitnewtags").click(function(){ console.log(data); if(data.flag){ massage(name+',添加成功!',''); - return false; + $("#selectTag").html(""); }else{ massage(name+',添加失败!',''); - return false; } } }); diff --git a/src/main/resources/templates/.idea/inspectionProfiles/Project_Default.xml b/src/main/resources/templates/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..6560a98 --- /dev/null +++ b/src/main/resources/templates/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,36 @@ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/.idea/misc.xml b/src/main/resources/templates/.idea/misc.xml new file mode 100644 index 0000000..d4b854b --- /dev/null +++ b/src/main/resources/templates/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/.idea/modules.xml b/src/main/resources/templates/.idea/modules.xml new file mode 100644 index 0000000..748ac78 --- /dev/null +++ b/src/main/resources/templates/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/.idea/templates.iml b/src/main/resources/templates/.idea/templates.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/src/main/resources/templates/.idea/templates.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/.idea/vcs.xml b/src/main/resources/templates/.idea/vcs.xml new file mode 100644 index 0000000..4fce1d8 --- /dev/null +++ b/src/main/resources/templates/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/.idea/workspace.xml b/src/main/resources/templates/.idea/workspace.xml new file mode 100644 index 0000000..778e7ed --- /dev/null +++ b/src/main/resources/templates/.idea/workspace.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + C:\Users\A11200321050045\AppData\Roaming\Subversion + + + + + 1601014009683 + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/comm/footer.ftl b/src/main/resources/templates/comm/footer.ftl index 75c658c..d840819 100644 --- a/src/main/resources/templates/comm/footer.ftl +++ b/src/main/resources/templates/comm/footer.ftl @@ -1,7 +1,8 @@ -
+<#--
--> +
-
-
下面这个按钮可以过滤帖子呦
-
- -