springboot 2.x配置https和http同时可以访问

1. 生成证书

如果配置了JAVA开发环境,可以使用keytool命令生成证书。我们打开控制台,输入:

keytool -genkey -alias tomcat -dname "CN=Andy,OU=kfit,O=kfit,L=HaiDian,ST=BeiJing,C=CN" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365

-alias tomcat,指定别名;

-dname "CN=Andy,OU=kfit,O=kfit,L=HaiDian,ST=BeiJing,C=CN",指定dn,其中CN是"Common Name"的缩写,指定通用名,一般可以使用域名;

OU是"Organizational Unit"的缩写,指定组织单位名;

O是"Organization"的缩写,指定组织名;

L是"Locality"的缩写,指定城市或地区;

ST是"State or Province"的缩写,指州或者省;

C是"Country"的缩写,指国家;

-storetype PKCS12,存储格式为p12;

-keyalg RSA,算法RSA;

-keysize 2048,密钥长度;

-keystore keystore.p12,指定存储的文件;

-validity 365,有效期,这里指定的是365天;

输入后会提示输入密码,这个密码在下面配置文件有用到。

生成后,在对应目录找到证书文件,复制到SpringBoot应用的src/main/resources下。

或者输入下面的命令:

keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore 

然后按照提示逐步输入相关参数。

输入密钥库口令:123456
再次输入新口令:123456
您的名字与姓氏是什么?
  [Unknown]:  kaibowang
您的组织单位名称是什么?
  [Unknown]:  yuxuelian
您的组织名称是什么?
  [Unknown]:  yuxuelian
您所在的城市或区域名称是什么?
  [Unknown]:  chengdu
您所在的省/市/自治区名称是什么?
  [Unknown]:  chengdushi
该单位的双字母国家/地区代码是什么?
  [Unknown]:  china
CN=kaibowang, OU=yuxuelian, O=yuxuelian, L=chengdu, ST=chengdushi, C=china是否正确?
  [否]:  y

输入 <tomcat> 的密钥口令
        (如果和密钥库口令相同, 按回车):
再次输入新口令:

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore C:\Users\Administrator\.keystore -destkeystore C:\Users\Administrator\.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

2. application.properties配置

在SpringBoot应用的application.properties增加ssl配置:

#https端口号.
server.port=443
#证书的路径.
server.ssl.key-store=classpath:keystore.p12
#证书密码,请修改为您自己证书的密码.
server.ssl.key-store-password=123456(改为之前设置的密码)
#秘钥库类型
server.ssl.keyStoreType=PKCS12
#证书别名
server.ssl.keyAlias=tomcat

 此时启动SpringBoot应用,发现可以通过https访问了。

3. 配置http访问

由于之前在配置文件配置了https,因此http要通过代码的形式配置。这个配置也比较简单,添加一个配置类就可以了。

import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.ConfigurableWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatConfig {

    @Bean
    public ServletWebServerFactory servletWebServerFactory() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setPort(80);
        tomcat.addAdditionalTomcatConnectors(connector);
        return tomcat;
    }
}

此时启动SpringBoot应用,发现也可以通过http 访问了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以尝试以下步骤: 1 确认是否已经在pom.xml文件中添加了shiro-spring-boot-starter依赖,如果没有,需要添加该依赖。 2. 确认ShiroFilterFactoryBean是否已经被正确配置。可以在application.yml文件或者application.properties文件中添加以下配置: ``` shiro: filter: anon: /login/** authc: /* loginUrl: /login successUrl: / unauthorizedUrl: /401 ``` 这里的配置表示:/login/** 路径下的请求可以匿名访问,而其他路径的请求都需要进行身份验证。在进行身份验证的时候,如果用户未登录,则会跳转到/login页面,如果验证失败,则会跳转到/401页面。 3. 确认是否已经在配置类中添加了ShiroFilterFactoryBean。例如: ``` @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/logout", "logout"); filterChainDefinitionMap.put("/static/**", "anon"); filterChainDefinitionMap.put("/login", "anon"); filterChainDefinitionMap.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; } ``` 这里的配置表示:/logout路径下的请求会进行注销操作,/static/** 路径下的请求可以匿名访问,/login路径下的请求也可以匿名访问,而其他路径的请求都需要进行身份验证。 如果以上步骤都已经确认无误,那么可以尝试重新编译运行程序,看看是否能够生效。如果还有问题,可以提供更多的具体信息,例如错误日志等,以便进行排查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值