Java實現http與https切換


Java支持Https需要配置相關步驟如下:

 

1.從Http跳轉到Https

添加jar包

1.加入struts2-ssl-plugin.jar這個包,

2.升級Struts2,struts必須是2.1.18版本以上

 

配置Tomcat服務器支持HTTPS

         1.生成證書

首先用jdk自帶的工具keytool生成一個"服務器證書"。

C:/Program Files/Java/jre1.5.0_04/bin> keytool -genkey -alias safetomcat -keyalg RSA -keystore c:/leadsec -validity 2000
輸入keystore密碼: leadsec
您的名字與姓氏是什么?
[Unknown]: 10.50.10.188
您的組織單位名稱是什么?
[Unknown]: Lenovo
您的組織名稱是什么?
[Unknown]: Lenovo
您所在的城市或區域名稱是什么?
[Unknown]: Beijing
您所在的州或省份名稱是什么?
[Unknown]: Beijing
該單位的兩字母國家代碼是什么
[Unknown]: CN
CN=10.50.10.188, OU= Lenovo, O= Lenovo, L=Beijing, ST=Beijing, C=CN
正確嗎?
[否]: y

輸入<safetomcat>的主密碼
(如果和 keystore 密碼相同,按回車):

經過上述操作后,獲得文件c:/Leadsec
注意:
提示名字和姓氏時,應輸入服務器的DNS域名或者IP地址,否則,客戶端會彈出警告窗口。"站點不符"
另外,因為是自簽名的證書,客戶端會彈出“非信任的機構頒發”,這時可以點擊“繼續”,或者安裝該證書,確認自己的信任。

建立服務器證書

2.配置Tomcat

找到tomcat的server配置文件,位置是Tomcat 5.5/conf/server.xml

修改server.xml文件中增加類似這樣的語句:

<Connector className="org.apache.coyote.tomcat5.CoyoteConnector"

port="8443" minProcessors="5" maxProcessors="75"

enableLookups="true" disableUploadTimeout="true"

acceptCount="100" debug="0" scheme="https" secure="true"

clientAuth="false" sslProtocol="TLS" keystoreFile="C:/leadsec" keystorePass="leadsec" />

              注意:

                     端口可以自行設置,但不能和已有的設置沖突。一般默認為8443。

                     keystoreFilekeystorePass必須與上一步建立的證書一致。

 

3.配置web.xml配置文件,位置是Tomcat 5.5/conf/web.xml

  在</welcome-file-list> 添加如下配置信息

<security-constraint>

        <web-resource-collection>

              <web-resource-name >SSL</web-resource-name>

                <url-pattern>/user/login.do</url-pattern>

        </web-resource-collection>

       <user-data-constraint>

           <transport-guarantee>CONFIDENTIAL</transport-guarantee>

        </user-data-constraint>

</security-constraint>

 

 

struts.xml配置及代碼設置

  1. 在struts.xml中設置:

    <constant name="struts2.sslplugin.httpPort" value="8080"/>

    <constant name="struts2.sslplugin.httpsPort" value="8443"/>

<constant name="struts2.sslplugin.annotations" value="true"/>

 

<package name="default" namespace="/" extends="ssl-default,json-default">(注:不要添加ssl自帶的攔截器,否則無法獲取request的信息(cookie,參數))

…..

 2. 之后在你要某個SSL的方法前,用注釋,就行了:

@Secured

    public String login() throws Exception {

        return SUCCESS;

}

如果要整個類都要SSL,則
@Secured

public class UserAction extends ActionSupport implements ServletRequestAware,    ServletResponseAware {

 

2.從Https跳轉到Http

         此處使用重定向進行跳轉,具體配置如下

  1. 在類中添加屬性

//重定向url

private String redirectUrl;

//Tomcat配置的http端口號

private static final String  HTTP_PORT="http.port";

然后再對應的方法末尾添加如下代碼

         redirectUrl="http://"+request.getServerName()+":"+ConfigUtils.getValue(HTTP_PORT)+request.getContextPath()+"/common/bizNav.do";

其中HTTP_PORT在環境文件中配置http.port=8080,此端口號為tomcat中http的端口號(tomcat/conf/server.xml)

 

  1. xml文件配置

由於使用重定向進行跳轉,所以使用外部注入的方式,在action配置文件中配置如下

            <action name="userLogin" class="UserAction" method="userLoginForStruts">

             <result name="success" type="redirect">${redirectUrl} </result>

     </action>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM