Jsp页面在Https和Http中打开

时间:2016-04-04 11:02:29

标签: java eclipse jsp tomcat

我是Java新手并使用Tomcat。

我已使用此链接将Tomcat配置为在https上运行 source

我只对Tomcat目录中的server.xml文件进行了更改。更改看起来像这样。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           keystoreFile="C:\Users\sanjithkumar017\Desktop\myKey.keystore" keystorePass="qwerty"
           clientAuth="false" sslProtocol="TLS" />

然后我就能成功访问网址https://localhost:8443

我创建了项目的war文件(mserv)并将其放在tomcat的webapps文件夹中。

问题是,当我点击它时,网址https://localhost:8443/mserv/dis.jsp我得到了回复(我的意思是它有效)。而且当我尝试http://localhost:8080/mserv/dis.jsp时,它工作正常。

这应该是这样的。我希望jsp页面只能在https上运行。

接下来我做的是将一个web.xml文件添加到我的eclipse项目中(因为我需要在我的项目中运行一些jsp页面才能运行http。)web.xml文件看起来像这样。

<security-constraint>
<web-resource-collection>
    <web-resource-name>secured page</web-resource-name>
    <url-pattern>/mserv/dis.jsp</url-pattern>
    <url-pattern>/mserv/index.jsp</url-pattern>
    <url-pattern>/mserv/pcr.jsp</url-pattern>
</web-resource-collection>
<user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>

所以我现在期待的是,只有上面提到的页面(应用程序的web.xml)必须可以通过https.But访问。我仍然能够使用http和https访问所有页面。

我希望只使用https访问我的页面。

我哪里出错了。请帮忙。

JDK :: jdk1.7.0_79

的Tomcat :: Apache的Tomcat的7.0.67

1 个答案:

答案 0 :(得分:0)

在您的项目中添加过滤器说HttpsFilter并使用请求对象来查找是否使用isSecure()方法请求https。以下是代码:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;


public class HttpsFilter implements Filter {

    /**
     * Default constructor. 
     */
    public HttpsFilter() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        // place your code here
        HttpServletResponse resp = (HttpServletResponse) response;
        if(!request.isSecure())
        {
            /* Here you can redirect to error page or do permanent redirection using resp object */
        }

        // pass the request along the filter chain
        chain.doFilter(request, response);
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}

在web.xml中,指定需要应用此过滤器的URL模式

<filter>
    <filter-name>httpsFilter</filter-name>
    <filter-class>HttpsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>httpsFilter</filter-name>
    <url-pattern>/mserv/dis.jsp</url-pattern>
    <url-pattern>/mserv/index.jsp</url-pattern>
    <url-pattern>/mserv/pcr.jsp</url-pattern>
</filter-mapping>