diff --git a/buildImage b/buildImage index 6486676..f0b28c5 100644 --- a/buildImage +++ b/buildImage @@ -13,3 +13,10 @@ docker load --input monitor.tar -- 运行docekr镜像 docker run -p 8088:8088 -d monitor/centos:latest + +docker run -it monitor/centos:latest /bin/bash + +docker inspect & docker info + +-- nginx地址 +/usr/local/share/other diff --git a/pom.xml b/pom.xml index 9c6bbc4..eae4e6d 100644 --- a/pom.xml +++ b/pom.xml @@ -120,6 +120,11 @@ javax.mail 1.6.2 + + com.github.binarywang + java-emoji-converter + 0.1.1 + org.springframework.boot diff --git a/run.sh b/run.sh index 54b6138..c8d7e36 100644 --- a/run.sh +++ b/run.sh @@ -1 +1 @@ -java -jar /home/monitor-3.1.5.jar > nohup.log +java -jar /home/monitor-3.1.5.jar --spring.profiles.active=dev diff --git a/src/main/java/com/quinn/common/QuinnConstant.java b/src/main/java/com/quinn/common/QuinnConstant.java index 5b0f6ab..70d67f9 100644 --- a/src/main/java/com/quinn/common/QuinnConstant.java +++ b/src/main/java/com/quinn/common/QuinnConstant.java @@ -17,20 +17,22 @@ public interface QuinnConstant { /** * 登录超时时间 */ - int SESSION_TIME_OUT = 30 * 60; + int SESSION_TIME_OUT = 90 * 60; - String SOURCE_KEY = "SOURCE_KEY_"; + String SESSION_VIEW_KEY = "NO-ADD"; /** * SESSION_ID */ String SESSION_ID = "SESSION_ID_"; - String APPEND_PASSWORD = "wangna&limengqi"; + String APPEND_PASSWORD = "#append_about"; - String NEW_SOURCE_PASSWORD = "limengqi&wangna"; + String NEW_SOURCE_PASSWORD = "#upload_source"; - String EDIT_SOURCE_FIRST = "lw@"; - String EDIT_SOURCE_LAST = "#"; + String EDIT_SOURCE_FIRST = "#edit@"; + String EDIT_SOURCE_LAST = "@"; - String DEFAULT_ATTR_BASE64 = "/images/avatar/quinn.png"; + String DEFAULT_ATTR_BASE64 = "/images/avatar/a1.png"; + + String DEFAULT_ATTR = "/images/avatar/a#.png"; } diff --git a/src/main/java/com/quinn/common/QuinnException.java b/src/main/java/com/quinn/common/QuinnException.java new file mode 100644 index 0000000..8f2635e --- /dev/null +++ b/src/main/java/com/quinn/common/QuinnException.java @@ -0,0 +1,9 @@ +package com.quinn.common; + +public class QuinnException extends RuntimeException{ + + public QuinnException(String message) { + super(message); + } + +} diff --git a/src/main/java/com/quinn/config/SecurityConfig.java b/src/main/java/com/quinn/config/SecurityConfig.java index 1bdc159..4858a88 100644 --- a/src/main/java/com/quinn/config/SecurityConfig.java +++ b/src/main/java/com/quinn/config/SecurityConfig.java @@ -8,18 +8,8 @@ import org.springframework.security.config.annotation.method.configuration.Enabl import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.core.AuthenticationException; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.web.AuthenticationEntryPoint; -import org.springframework.security.web.authentication.AuthenticationEntryPointFailureHandler; -import org.springframework.security.web.authentication.AuthenticationFailureHandler; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.PrintWriter; @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) @@ -37,10 +27,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { // .permitAll(); //无条件允许访问 // 访问权限 http.authorizeRequests() - .antMatchers("/","/index").permitAll() - .antMatchers("/register","/login","/toLogin").permitAll() + .antMatchers("/","/index","/favicon.ico").permitAll() + .antMatchers("/register","/login","/toLogin","/checkLogin").permitAll() .antMatchers("/source","/source/view/*").permitAll() .antMatchers("/blog","/blog/read/*").permitAll() + .antMatchers("/search/**").permitAll() + .antMatchers("//about").permitAll() .antMatchers("/hotspot").permitAll() .antMatchers("/blog/**").authenticated() .antMatchers("/source/**").authenticated() @@ -54,7 +46,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .passwordParameter("password") .loginPage("/toLogin") .loginProcessingUrl("/login") // 登陆表单提交请求 - .failureForwardUrl("/loginError") .defaultSuccessUrl("/index"); // 设置默认登录成功后跳转的页面 // 注销配置 @@ -63,8 +54,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { http.csrf().disable();//关闭csrf功能:跨站请求伪造,默认只能通过post方式提交logout请求 http.logout().logoutSuccessUrl("/"); - // 记住我配置 - http.rememberMe().rememberMeParameter("remember"); + // 记住我配置 默认为remember-me +// http.rememberMe().rememberMeParameter("remember"); } // 用户授权验证 diff --git a/src/main/java/com/quinn/config/Swagger2Config.java b/src/main/java/com/quinn/config/Swagger2Config.java index 0c18e82..6df5a94 100644 --- a/src/main/java/com/quinn/config/Swagger2Config.java +++ b/src/main/java/com/quinn/config/Swagger2Config.java @@ -36,7 +36,7 @@ public class Swagger2Config { .title("Quinn-Api") .description("Quinn-Api") .version("1.0") - .contact(new Contact("Quinn", "http://quinn.com", "24736743@qq.com")) + .contact(new Contact("Quinn", "https://www.qnforever.top", "540344226@qq.com")) .build(); } diff --git a/src/main/java/com/quinn/controller/AboutController.java b/src/main/java/com/quinn/controller/AboutController.java index 99fda47..b7a01ff 100644 --- a/src/main/java/com/quinn/controller/AboutController.java +++ b/src/main/java/com/quinn/controller/AboutController.java @@ -41,7 +41,7 @@ public class AboutController extends BaseModelController { return "page/about"; } - @PostMapping("/about") + @PostMapping("/about/append") @PreAuthorize("hasAuthority('ADMIN')") public String saveSay(About about){ about.setId(QuinnUtils.getUuid()); diff --git a/src/main/java/com/quinn/controller/BlogController.java b/src/main/java/com/quinn/controller/BlogController.java index 0eb113f..bc34861 100644 --- a/src/main/java/com/quinn/controller/BlogController.java +++ b/src/main/java/com/quinn/controller/BlogController.java @@ -6,6 +6,7 @@ import com.quinn.common.Category; import com.quinn.pojo.*; import com.quinn.service.*; import com.quinn.utils.ContentUtil; +import com.quinn.utils.CovertEmojStr; import com.quinn.utils.QuinnUtils; import com.quinn.vo.*; import org.slf4j.Logger; @@ -43,10 +44,10 @@ public class BlogController extends BaseModelController{ // 列表展示 @GetMapping("/blog") - public String blogList(Model model){ - + public String blogList(HttpServletRequest request,Model model){ + String loginUserId = getLoginUserId(request); MyPageParam myPageParam = new MyPageParam(1, 10); - List blogList = blogService.getBlogWithUserOrderBySort(myPageParam); + List blogList = blogService.getBlogWithUserOrderBySort(loginUserId,myPageParam); // 结果 model.addAttribute("blogList",blogList); model.addAttribute("pageParam",myPageParam); @@ -62,13 +63,14 @@ public class BlogController extends BaseModelController{ } @PostMapping("/blog") - public String blogListPage(NavReq navReq, Model model){ + public String blogListPage(HttpServletRequest request,NavReq navReq, Model model){ + String loginUserId = getLoginUserId(request); // 用户的论坛列表 if (navReq.getPageNum() < 1){ navReq.setPageNum(1); } MyPageParam myPageParam = new MyPageParam(navReq.getPageNum(),navReq.getLimit()); - List blogList = blogService.getBlogWithUserOrderBySort(myPageParam); + List blogList = blogService.getBlogWithUserOrderBySort(loginUserId,myPageParam); // 结果 model.addAttribute("blogList",blogList); model.addAttribute("pageParam",myPageParam); @@ -98,10 +100,10 @@ public class BlogController extends BaseModelController{ blog.setBid(QuinnUtils.getUuid()); blog.setTitle(questionWriteForm.getTitle()); - blog.setContent(questionWriteForm.getContent()); + blog.setContent(CovertEmojStr.coverStr(questionWriteForm.getContent())); String s = ContentUtil.toTextContentFromWangEdit(questionWriteForm.getContentJson()); - blog.setContentJson(s); + blog.setContentJson(CovertEmojStr.coverStr(s)); blog.setSort(0); blog.setViews(0); @@ -166,11 +168,10 @@ public class BlogController extends BaseModelController{ @PostMapping("/blog/editor") public String editor(Blog blog){ Blog queryBlog = blogService.getOne(new QueryWrapper().eq("bid", blog.getBid())); - queryBlog.setTitle(blog.getTitle()); queryBlog.setCategoryId(blog.getCategoryId()); - queryBlog.setContent(blog.getContent()); - String s = ContentUtil.toTextContentFromWangEdit(blog.getContentJson()); + queryBlog.setContent(CovertEmojStr.coverStr(blog.getContent())); + String s = ContentUtil.toTextContentFromWangEdit(CovertEmojStr.coverStr(blog.getContentJson())); queryBlog.setContentJson(s); queryBlog.setGmtUpdate(QuinnUtils.getTime()); diff --git a/src/main/java/com/quinn/controller/LoginController.java b/src/main/java/com/quinn/controller/LoginController.java index 4e3e679..ca01f32 100644 --- a/src/main/java/com/quinn/controller/LoginController.java +++ b/src/main/java/com/quinn/controller/LoginController.java @@ -1,16 +1,19 @@ package com.quinn.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.quinn.common.QuinnException; import com.quinn.common.RoleType; import com.quinn.intergration.AttrIcon; -import com.quinn.intergration.SendBMail; import com.quinn.pojo.Invite; import com.quinn.pojo.User; import com.quinn.pojo.UserInfo; import com.quinn.service.InviteService; import com.quinn.service.UserInfoService; import com.quinn.service.UserService; +import com.quinn.task.SendAsyncEmail; +import com.quinn.utils.AsyncTaskUtil; import com.quinn.utils.QuinnUtils; +import com.quinn.vo.CheckLoginForm; import com.quinn.vo.RegisterForm; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -40,10 +43,22 @@ public class LoginController { return "index"; } - @PostMapping("/loginError") - public String error(Model model){ - model.addAttribute("loginMsg","错误的用户名或者密码!"); - return "forget"; + @PostMapping("/checkLogin") + public void checkLogin(HttpServletResponse response,CheckLoginForm loginForm) throws IOException { + PrintWriter writer = response.getWriter(); + User user = userService.getOne(new QueryWrapper().eq("username", loginForm.getUsername())); + String isOk = "no"; + if (user != null){ + // checkPassword + String password = user.getPassword(); + boolean check = new BCryptPasswordEncoder().matches(loginForm.getPassword(),password); + if (check){ + isOk = "ok"; + } + } + writer.write(isOk); + writer.flush(); + writer.close(); } @GetMapping("/toLogin") @@ -57,27 +72,49 @@ public class LoginController { } // 注册业务 - @PostMapping("/register") - public String register(HttpServletResponse response,RegisterForm registerForm, Model model) throws IOException { + @PostMapping("/checkRegister") + public void checkRegister(HttpServletResponse response,RegisterForm registerForm) throws IOException { response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); // 表单密码重复判断 if (!registerForm.getPassword().equals(registerForm.getRepassword())){ - return toResult(writer,"两次输入密码不一致!"); + toResult(writer,"两次输入密码不一致!"); } // 用户名已存在 User hasUser = userService.getOne(new QueryWrapper().eq("username", registerForm.getUsername())); if (hasUser!=null){ - return toResult(writer,"用户名太热门了,请更换用户名"); + toResult(writer,"用户名太热门了,请更换用户名"); + } + // 验证邀请码 + Invite invite = inviteService.getOne(new QueryWrapper().eq("code", registerForm.getCode())); + if (invite==null){ + toResult(writer,"注册码不存在!"); + } + if (!invite.getApplyEmail().equals(registerForm.getEmail())){ + toResult(writer,"请使用申请注册码邮箱注册用户!"); + } + } + + // 注册业务 + @PostMapping("/register") + public String register(RegisterForm registerForm, Model model) throws IOException { + // 表单密码重复判断 + if (!registerForm.getPassword().equals(registerForm.getRepassword())){ + throw new QuinnException("防爬虫,两次输入密码不一致!"); + } + // 用户名已存在 + User hasUser = userService.getOne(new QueryWrapper().eq("username", registerForm.getUsername())); + if (hasUser!=null){ + throw new QuinnException("防爬虫,用户名太热门了,请更换用户名"); } // 验证邀请码 Invite invite = inviteService.getOne(new QueryWrapper().eq("code", registerForm.getCode())); if (invite==null){ - return toResult(writer,"注册码不存在!"); + throw new QuinnException("防爬虫,注册码不存在!"); } - if (invite.getApplyEmail().equals(registerForm.getEmail())){ - return toResult(writer,"请使用申请注册码邮箱注册用户!"); + if (!invite.getApplyEmail().equals(registerForm.getEmail())){ + throw new QuinnException("防爬虫,请使用申请注册码邮箱注册用户!"); } // 构建用户对象 User user = new User(); @@ -99,16 +136,15 @@ public class LoginController { inviteService.updateById(invite); userInfoService.save(new UserInfo().setUid(user.getUid()).setEmail(registerForm.getEmail())); // 发送注册成功通知邮件 - SendBMail.INSTANCE.sendWelcome(registerForm.getUsername(),registerForm.getEmail()); + AsyncTaskUtil.INSTANCE.submit(new SendAsyncEmail(registerForm.getUsername(),registerForm.getEmail())); // 注册成功,重定向到登录页面 return "redirect:/toLogin"; } - private String toResult(PrintWriter writer, String msg) { + private void toResult(PrintWriter writer, String msg) { writer.write(msg); writer.flush(); writer.close(); - return "register"; } } diff --git a/src/main/java/com/quinn/controller/SearchController.java b/src/main/java/com/quinn/controller/SearchController.java index 8b3bad8..cbfaff1 100644 --- a/src/main/java/com/quinn/controller/SearchController.java +++ b/src/main/java/com/quinn/controller/SearchController.java @@ -55,7 +55,7 @@ public class SearchController extends BaseModelController{ } String loginUserId = getLoginUserId(request); User uid = userService.getOne(new QueryWrapper().eq("uid", loginUserId)); - if (RoleType.ADMIN.getName().equals(uid.getRole())){ + if (uid != null && RoleType.ADMIN.getName().equals(uid.getRole())){ String result = doAdmin(findWhat, model); if (!QuinnConstant.GUN.equals(result)){ return result; diff --git a/src/main/java/com/quinn/controller/SourceController.java b/src/main/java/com/quinn/controller/SourceController.java index 6b94c7c..87a9b77 100644 --- a/src/main/java/com/quinn/controller/SourceController.java +++ b/src/main/java/com/quinn/controller/SourceController.java @@ -138,16 +138,17 @@ public class SourceController extends BaseModelController { * @throws IOException */ @PostMapping("/source/download/{sid}") - public void download(HttpServletResponse response, @PathVariable("sid") String sid) throws IOException { + public void download(HttpServletRequest request,HttpServletResponse response, @PathVariable("sid") String sid) throws IOException { + String sessionId = getSessionId(request); Source source = sourceService.getOne(new QueryWrapper().eq("sid", sid)); if (source!=null){ if (SourceType.OSS.name().equals(source.getSourceType())){ //通知浏览器以附件形式下载 response.setHeader("Content-Disposition", "attachment;filename=" + source.getEnName() + QuinnConstant.LINK_SUFFIX + source.getFileType()); - this.sourceService.downloadSource(response,source); + sourceService.downloadSource(response,source,sessionId); }else { - this.sourceService.downloadForBaidu(response,source); + sourceService.downloadForBaidu(response,source,sessionId); } } } diff --git a/src/main/java/com/quinn/intergration/AttrIcon.java b/src/main/java/com/quinn/intergration/AttrIcon.java index 1e73f5a..670b199 100644 --- a/src/main/java/com/quinn/intergration/AttrIcon.java +++ b/src/main/java/com/quinn/intergration/AttrIcon.java @@ -13,12 +13,22 @@ public enum AttrIcon { INSTANCE; /** - * 用户名 + * 用户名 使用第三方生成工具 + * @param name + */ + public String generateThirdUrl(String name) { + String attrUrl = "https://api.multiavatar.com/"; + return attrUrl + name + ".png"; + } + + /** + * 用户名 为提高效率,使用本地生成工具算法 * @param name */ public String generateImgUrl(String name) { - String attrUrl = "https://api.multiavatar.com/"; - return attrUrl + name + ".png"; + int num = name.hashCode(); + int index = num % 15; + return QuinnConstant.DEFAULT_ATTR.replace("#",index + ""); } /** @@ -39,9 +49,4 @@ public enum AttrIcon { return QuinnConstant.DEFAULT_ATTR_BASE64; } - public static void main(String[] args) { - String limengqi = AttrIcon.INSTANCE.generateImg("limengqi"); - System.out.println(limengqi); - } - } diff --git a/src/main/java/com/quinn/mapper/BlogMapper.java b/src/main/java/com/quinn/mapper/BlogMapper.java index b5bb33b..92fee71 100644 --- a/src/main/java/com/quinn/mapper/BlogMapper.java +++ b/src/main/java/com/quinn/mapper/BlogMapper.java @@ -19,9 +19,9 @@ public interface BlogMapper extends BaseMapper { List getTopBlog(); - List getBlogWithUserOrderBySort(MyPageParam myPageParam); + int getBlogWithUserOrderBySortCount(String userId); - List getBlogWithUser(MyPageParam myPageParam); + List getBlogWithUserOrderBySort(String userId,MyPageParam myPageParam); List getMyBlogs(String userId,MyPageParam myPageParam); } diff --git a/src/main/java/com/quinn/mapper/xml/BlogMapper.xml b/src/main/java/com/quinn/mapper/xml/BlogMapper.xml index d2bbd41..16e37ee 100644 --- a/src/main/java/com/quinn/mapper/xml/BlogMapper.xml +++ b/src/main/java/com/quinn/mapper/xml/BlogMapper.xml @@ -9,22 +9,21 @@ order by (views + star) desc limit 7 - + select count(1) + from qn_blog a + where (case when a.category_id = '1' then a.author_id = #{userId} else 1 end) - select a.id,a.bid,a.title,a.sort,a.views,a.author_id,a.category_id,a.category_name,a.gmt_create,a.gmt_update ,b.username,b.avatar, (select count(1) from qn_star c where c.topic_id = a.bid and c.topic_category = 'BLOG') as star from qn_blog a,qn_user b - where a.author_id = b.uid order by a.gmt_create desc - limit #{pageNum},#{size} + where a.author_id = b.uid + and (case when a.category_id = '1' then a.author_id = #{userId} else 1 end) + order by a.sort desc,a.gmt_create desc + limit #{myPageParam.pageNum},#{myPageParam.size}
- +
- + +
- + @@ -100,7 +100,7 @@ return; } this.disabled = true; - this.submit(); + $('#editForm').submit(); } diff --git a/src/main/resources/templates/blog/read.html b/src/main/resources/templates/blog/read.html index c96d7c2..e08073a 100644 --- a/src/main/resources/templates/blog/read.html +++ b/src/main/resources/templates/blog/read.html @@ -25,11 +25,14 @@
-

+

+ [[${blog.getTitle()}]] + + +

发布文章

-
+ @@ -38,7 +38,7 @@
- + +
  • -
  • -
    - +
    + diff --git a/src/main/resources/templates/forget.html b/src/main/resources/templates/forget.html deleted file mode 100644 index 5ecb526..0000000 --- a/src/main/resources/templates/forget.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - 注册-Quinn - - - - - - - - - - - - diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 1e0683f..bc9016a 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -7,98 +7,84 @@ +
    -
    -
    -返回顶部 + diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index 45833ac..38aaf3c 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -13,7 +13,7 @@
    -
    +

    登录Quinn

    @@ -27,10 +27,10 @@
    - +

    没有账号?去注册

    @@ -42,8 +42,6 @@
    - - diff --git a/src/main/resources/templates/page/append.html b/src/main/resources/templates/page/append.html index 20b7d78..d564d85 100644 --- a/src/main/resources/templates/page/append.html +++ b/src/main/resources/templates/page/append.html @@ -15,7 +15,7 @@
    - +
    diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html index 9025798..d741d1e 100644 --- a/src/main/resources/templates/register.html +++ b/src/main/resources/templates/register.html @@ -35,8 +35,8 @@
    - - + +

    @@ -52,7 +52,7 @@ - +