0. 说明
使用
- NetBeans 12.4
- GlassFish Server 5.0
- Java EE 8
另外,由于NetBeans对修改的内容有时响应非常迟钝,当不确定变更是否生效时,可以把它关了重启。
吐槽:之前有一回直到下午它运行的还是上午的代码,中间修改的代码全部没生效,给我整懵了。
1. web.xml
在WEB-INF
目录下的web.xml
文件里的<web-app>
标签中添加以下内容
<security-constraint>
<web-resource-collection>
<web-resource-name>*</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
其中<url-pattern>
的作用是指明需要ssl保护的路径。
<web-resource-name>
的作用我还不太明白,网上查到这块填的内容各种各样。
最终web.xml
文件里这一块的内容应该大概是这样的。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
<security-constraint>
<web-resource-collection>
<web-resource-name>*</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<servlet>
<servlet-name>NewServlet</servlet-name>
<servlet-class>NewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>NewServlet</servlet-name>
<url-pattern>/NewServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
2. GlassFish
2.1 生成并配置CA证书(无需购买第三方认证证书有也行)
参考《GlassFish3 配置https登录》和《Glassfish4.1和Tomcat配置Https访问》。
- 切换到GlassFish的
glassfish\domains\domain1\config
目录下
例如我的是D:\GlassFish_Server_5.0\glassfish\domains\domain1\config
- 使用以下命令删除系统默认的s1as
keytool -delete -alias s1as -keystore keystore.jks -storepass changeit
- 生成新的
keystore.jks
keytool -genkeypair -keyalg RSA -keysize 1024 -keystore keystore.jks -validity 18760 -alias s1as
运行这个命令后,需要输入以下一系列数据(以及我填的内容)
输入密钥库口令:
您的名字与姓氏是什么?
[Unknown]: localhost
您的组织单位名称是什么?
[Unknown]: javaapplication
您的组织名称是什么?
[Unknown]: mycompany
您所在的城市或区域名称是什么?
[Unknown]: city
您所在的省/市/自治区名称是什么?
[Unknown]: province
该单位的双字母国家/地区代码是什么?
[Unknown]: cn
CN=localhost, OU=javaapplication, O=mycompany, L=city, ST=province, C=cn是否正确?
[否]: y
输入 <s1as> 的密钥口令
(如果和密钥库口令相同, 按回车):
再次输入新口令:
- 生成需要CA认证的CSR文件
keytool -certreq -alias s1as -file s1as.csr -keystore keystore.jks -storepass changeit
- 删除
cacerts.jks
文件 - 生成新的
cacerts.jks
keytool -import -v -trustcacerts -alias s1as -file s1as.cer -keystore cacerts.jks -keypass changeit
- 重启项目
2.2 处理依赖
参考GitHub(从StackOverflow所给链接而来)和StackOverflow上的内容。
若是出现报错
java.lang.NoClassDefFoundError: Could not initialize class sun.security.ssl.SSLEngineImpl
那么需要对glassfish\modules\endorsed
路径下的grizzly-npn-bootstrap.jar
文件进行操作。
(我的文件路径是D:\GlassFish_Server_5.0\glassfish\modules\endorsed\grizzly-npn-bootstrap.jar
)
-
用解压软件打开它
无需解压。
我用的是WinRAR。
打开grizzly-npn-bootstrap.jar
- 选中并删除
sun
目录
需要关闭正在运行中的项目,不然可能有文件被占用,无法删除。
选中并删除sun目录
- 重启项目
网友评论