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
-