kasuie page cover

过去和未来

发表于

浏览量867

评论数0

过去和未来

XqB3b4zp.png

简介:

此文记录一些:踩坑记录+目前待优化及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证书部署关于宝塔面板的 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

pPDHzAGJ.png
  1. 回到顶部优化
  2. 搜索功能特定情况出现页面卡死
  3. 文章字体显示过暗
  4. 随心记页面优化
  5. 留言页面优化
  6. 搜索结果显示页面优化
  • 待实现功能

  1. 登录用户自定义头像
  2. 安利墙安利墙 项目转移本网站
  3. 暗夜模式
  4. 二次元老婆展示功能
  5. 投票功能
  6. RSS订阅
注: 以上仅供参考,看心情摸鱼,如果实现难度过大或没有实际用处我大概不会弄。
Lu80vale.png
最后修改:2023年07月18日

留下你的评论吧

http(s)://

回到顶部