我只是在试用Servlet安全机制。我在我的web.xml中使用了<transport-guarantee>CONFIDENTIAL</transport-guarantee>
并使用了“BASIC”身份验证。访问约束资源时,重定向后不显示页面。以下是我的代码片段
Tomcat的users.xml中
<role rolename="Admin"/>
<role rolename="Member"/>
<role rolename="Guest"/>
<user username="Annie" password="admin" roles="Admin, Member, Guest"/>
<user username="Diane" password="coder" roles="Member, Guest"/>
<user username="Ted" password="newbie" roles="Guest"/>
的web.xml
<web-app version="3.0">
<display-name>SecurityApp</display-name>
<servlet>
<servlet-name>BeerAppServlet</servlet-name>
<servlet-class>com.examples.servlets.BeerAppServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BeerAppServlet</servlet-name>
<url-pattern>/Beer/AddRecipe</url-pattern>
</servlet-mapping>
<security-role>
<role-name>Admin</role-name>
</security-role>
<security-role>
<role-name>Member</role-name>
</security-role>
<security-role>
<role-name>Guest</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>Update</web-resource-name>
<url-pattern>/Beer/AddRecipe/*</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>Admin</role-name>
<role-name>Member</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
我的Servlet类如下
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
writer.println("<h3> Welcome to Beer Application Site</h3>");
}
当我按如下方式访问我的应用程序时
http://localhost:8083/SecurityApp/Beer/AddRecipe
完成重定向,上面提到的网址变为
https://localhost:8553/SecurityApp/Beer/AddRecipe
并且不显示任何页面,而是浏览器显示如下
连接已重置 页面加载时重置了与服务器的连接。 该网站可能暂时不可用或太忙。片刻之后再试一次。 如果您无法加载任何页面,请检查计算机的网络连接。 如果您的计算机或网络受防火墙或代理保护,请确保允许Firefox访问Web。
我希望该页面应与欢迎使用啤酒应用程序站点一起显示。 我正在使用tomcat apache-tomcat-7.0.47 我在server.xml中的重定向端口是
<Connector connectionTimeout="20000" port="8083" protocol="HTTP/1.1" redirectPort="8553"/>
任何人都可以告诉我这里有什么问题,或者我是否缺少任何需要完成的配置。
答案 0 :(得分:1)
在浏览Tomcat文档后,我发现需要在tomcat的server.xml中启用SSL
根据首先启用SSL配置的文档,我们需要生成.keystore文件。
这些是tomcat文档中提供的步骤
要在Tomcat上安装和配置SSL支持,您需要遵循以下简单步骤。
通过执行以下命令,创建一个密钥库文件来存储服务器的私钥和自签名证书:
视窗:
%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
由于我有一个Windows系统,以下是我为生成.keystore文件所做的步骤
C:\Program Files\Java\jdk1.7.0_45\bin>keytool -genkey -alias tomcat -keyalg RSA
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: AvinashReddy
What is the name of your organizational unit?
[Unknown]: Organization Name
What is the name of your organization?
[Unknown]: Organization Name
What is the name of your City or Locality?
[Unknown]: Hyderabad
What is the name of your State or Province?
[Unknown]: AndhraPradesh
What is the two-letter country code for this unit?
[Unknown]: AP
Is CN=AvinashReddy, OU=Organization Name, O=Organization Name, L=Hyderabad, ST=AndhraPradesh, C=AP correct?
[no]: yes
Enter key password for <tomcat>
(RETURN if same as keystore password):
根据文档,我使用了密码“changeit”(全部小写),在最后一步中我只按了“Enter”键,所以当使用与以下问题“输入密钥库密码时键入的密码相同的密码时“在生成.keytstore文件的时候被问到了
我已经更改了tomcat中的server.xml,如下所示
<Connector connectionTimeout="20000" port="8083" protocol="HTTP/1.1" redirectPort="8553"/
<Connector port="8553" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="${user.home}/.keystore" keystorePass="changeit" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8553"/>
tomcat中重定向的默认端口是8443,因为我的系统上运行了2个tomcat实例,我将重定向端口从8443更改为8553。
更改后,我重新启动了我的tomcat,可以访问受约束的资源。
我输入了
http://localhost:8083/SecurityApp/Beer/AddRecipe
然后将其重定向到
https://localhost:8553/SecurityApp/Beer/AddRecipe
由于我使用了“BASIC”身份验证机制,因此系统提示我输入用户名和密码。提供凭证后,我能够看到我的页面如下
“欢迎来到啤酒应用网站”
以下是配置tomcat提供的SSL的链接
http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html#Configuration