过去和未来
发表于
浏览量1050
评论数0
过去和未来
简介:
此文记录一些:踩坑记录+目前待优化及bug+待实现功能 注意:我使用的编译器为IDEA v2020.2.2;Spring Boot为v2.3.5.RELEASE;JDK为1.8
-
踩坑记录
1.静态资源路径的配置
第一次使用thymeleaf的时候,困扰我很久时间的问题是跳转页面后静态资源总是404,以前学习的时候貌似并没有提到这个问题(~~也有可能是自己没认真~~),所以自己去查找了一下解决方案,最终解决方案是在application.properties(在yml文件配置也是一样的)中自己配置静态资源的位置映射,以下是我的配置。
spring.resources.static-locations=classpath:/templates/
2.拦截器注册
当然并不是所有静态资源都是能直接访问,所以需要注册拦截器,刚开始我的做法是继承WebMvcConfigurerAdapter以实现,但发现其已经过时,不推荐使用,而是改用实现WebMvcConfigurer这个接口,以下是我的代码示例。
package com.kasuie.blog.config;
import com.kasuie.blog.interceptor.AdminInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AdminInterceptor()).addPathPatterns("/admin/**").excludePathPatterns("/admin","/admin/","/admin/login.html","/admin/login","/");
}
}
3.SpringBoot+阿里云的https配置
本来是打算用关于宝塔面板的 Nginx 反向代理以及SSL证书部署实现https的,因为之前用过,也非常方便的,免费且可自动进行续签,但是不知道是不是服务器的原因,宝塔面板没登上去,所以改用阿里云,之前没用过,第一次用,总的来说也很方便。阿里云个人可以免费申请一年的SSL证书,到期貌似是可免费续的,申请成功后,把对应的证书下载到本地,把下载后的压缩包内容置入对应项目的resources目录下,当然还需要在application.properties中配置,以下是我的:
server.ssl.key-store=(以.pfx为后缀的证书文件)
server.ssl.key-store-password=(放在pfx-password.txt中的密码)
当然到这里还没完,你还需要自己创建一个配置类,把http 80端口转到https 443端口
package com.kasuie.blog.config;
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatConfig {
@Bean
TomcatServletWebServerFactory tomcatServletWebServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(){
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
factory.addAdditionalTomcatConnectors(createTomcatConnector());
return factory;
}
private Connector createTomcatConnector() {
Connector connector = new
Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
}
以上就是我的配置过程,这个倒是没有遇到什么坑,比较顺利。
4.url异常出现jsessionid
jsessionid是标明session的id的,存在于cookie中的,一般情况下不会出现在url中,出现原因我大致百度了一下,发现是浏览器禁用了cookie或者cookie中不存在jsessionid,解决方案我也看到很多种,最终尝试了一下一个比较简单代码少的方法,就是在application.properties中配置禁使用jsessionid,以下是我的配置:
server.servlet.session.tracking-modes=cookie
server.servlet.session.cookie.http-only=true
5.在Spring Boot中使用servlet
~~又想起了刚学java web时被servlet支配的恐惧了,框架果然香啊。~~ 不过在这个项目中还是使用了serlvet,因此记录一下过程。非常简单,写一个servlet在上面添加@WebServlet注解,以下是我博客验证码的servlet程序。
package com.kasuie.blog.servlet;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
@WebServlet(urlPatterns = "/code")
public class VerifyCodeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int width = 80;
int height = 32;
String data = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghijklmnpqrstuvwxyz";
Random random = new Random();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.gray);
g.fillRect(0, 0, width, height);
g.setColor(Color.WHITE);
g.fillRect(1, 1, width-2, height-2);
StringBuilder builder = new StringBuilder();
g.setFont(new Font("宋体", Font.BOLD&Font.ITALIC, 20));
for(int i = 0 ; i < 4 ;i ++){
g.setColor(new Color(random.nextInt(255),random.nextInt(255), random.nextInt(255)));
int index = random.nextInt(data.length());
String str = data.substring(index, index + 1);
builder.append(str);
g.drawString(str, (width / 6) * (i + 1) , 20);
}
for(int j=0,n=random.nextInt(50);j<n;j++){
g.setColor(Color.RED);
g.fillRect(random.nextInt(width),random.nextInt(height),1,1);
}
String tempStr = builder.toString();
req.getSession().setAttribute("sessionCacheData",tempStr);
ImageIO.write(image, "jpg", resp.getOutputStream());
}
}
其中@WebServlet(urlPatterns = "/code")即为注解。
-
目前待优化及已知bug
- 回到顶部优化
- 搜索功能特定情况出现页面卡死
- 文章字体显示过暗
- 随心记页面优化
- 留言页面优化
- 搜索结果显示页面优化
-
待实现功能
- 登录用户自定义头像
- 安利墙 项目转移本网站
- 暗夜模式
- 二次元老婆展示功能
- 投票功能
- RSS订阅