如何使用Spring 3.x开发https站点?

时间:2011-10-18 17:15:30

标签: security spring https

我是基于Spring的Web开发的新手。

我们的网站是基于Spring的,目前基于http(非常不安全)。 由于该网站尚未生效,我们还通过正常的JSON请求向服务器发送登录/密码,主要关注JSP,UI设计,SQL查询等。

现在,我们希望转向专注于安全性,并转而采用https作为第一步。

我读过没有。网页和一些春季书籍似乎没有提供关于如何使用Spring提供https安全性的明确答案。 有人可以帮助我实现上述目标吗?

如果我的问题不明确,请告诉我。我会尽快添加更多细节。

我们的web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
  http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
  http://www.springframework.org/schema/mvc
  http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd    
"
id="WebApp_ID" version="2.5">

<display-name>Spring3MVC</display-name>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

<!--> Mapping for serving static web-content <-->
<!--> The resources folder must be in parallel to WEB-INF <-->
<!--> The mvc:resources gives "not bound" exception unless bound to a namespace as above for xmlns:mvc <-->
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:resources mapping="/scripts/**" location="/scripts/" />

</web-app>

现在只有一个控制器,spring-servlet.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:component-scan
    base-package="console.controllerpkg" />

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

</beans>

提前多多感谢!

P.S。如果你可以在春天推荐我一个很好的基于网站/书籍的例子,我将不胜感激。我见过的大多数网站/书籍都非常重视理论,但很少有例子。这让我有点困惑。

4 个答案:

答案 0 :(得分:12)

正如Dave所说,您需要配置容器以提供SSL,然后将spring应用程序部署到该容器中。了解有关配置Tomcat for SSL.

的信息

或者,您可以更灵活地front your container using Apacheenable SSL there.

答案 1 :(得分:4)

Spring并非100%负责配置SSL。为此,您需要配置容器(jetty,tomcat等)来处理SSL。

答案 2 :(得分:3)

感谢所有帮助人员。 我将重新迭代我为了自己的记录而做的事情。

首先,关于'Tomcat for SSL'提供的链接非常有用。 我在那里阅读了所有关于SSL和Tomcat的内容,这就是我所做的:

在命令提示符下,输入: keytool -genkey -alias tomcat -keyalg RSA 上面的命令问了我一些证书所需的简单问题。我在任何地方都使用了密码'changeit'(因为这是默认密码)。

在完成上述命令后,它在C:/ Documents and Settings // .keystore中生成了一个密钥库文件 我将此.keystore文件复制到tomcat / conf / myKeyStore.jks

然后我将以下内容添加到conf / server.xml:

<Connector protocol="org.apache.coyote.http11.Http11Protocol"
    port="8443" minSpareThreads="5" 
   maxSpareThreads="75"
   enableLookups="true" 
   disableUploadTimeout="true"
   acceptCount="100" 
   maxThreads="200" debug="5"
   scheme="https" secure="true" SSLEnabled="true"
   keystoreFile="${catalina.home}/conf/myKeyStore.jks"
   keystoreType="JKS" keystorePass="changeit"
   truststoreFile="${catalina.home}/conf/cacerts"
   truststoreType="JKS" truststorePass="changeit"
   SSLVerifyClient="require" SSLEngine="on" SSLVerifyDepth="2" 
   sslProtocol="TLS" />

就是这样! 下次,我运行tomcat我的旧http链接无法正常工作。 然后我尝试将甜蜜's'添加到http,端口号为8443并且lo!一切都恢复正常。

非常感谢您的精彩链接!

答案 3 :(得分:0)

配置两个不同的网站,一个用于http,一个用于https,一个用于http只能重定向到https网站。