我是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
答案 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>