2011-08-08 64 views
0

有一堆链接访问我的servlet而没有https
由于servlet是一种通用形式,并且http url使用随机id生成,所以很难使用modrewrite或类似的东西。从http重定向到https并返回到http内的servlet

所以我修改我的servlet的代码这样的:

//redirect to https 
     String sec = servletRequest.getParameter("Sec"); 
     String qString = servletRequest.getQueryString(); 

     if (StringUtils.isEmpty(sec)){ 
       try { 
        HttpServletResponse rsp = request.getServletResponse(true); 


         String PORTAL_URL = l_aliasHelper.getPath(request); 


       rsp.sendRedirect("https://"+servletRequest.getServerName() +PORTAL_URL+"?" +qString+"&Sec=yes"); 
       } catch (Exception e) { 
       e.printStackTrace(); 
       } 

     } 

现在能正常工作!

但是,如果我想回到http,因为我想避免对其他页面上的不安全元素进行唠叨警告,该怎么办。

那么如何在用户提交表单后再次重定向到http?

如果一切运行良好,用户将在他开始的同一个URL下显示一条成功消息的响应。

So the cycle goes like this: 
http://<somedomain>/<anypath>?<anyid> 
https://<somedomain>/<anypath>?<anyid>&Sec=yes 
and now it should go back maybe with a step inbetween to 
http://<somedomain>/<anypath>?<anyid> <- the success message should be 
displayed here 

在显示消息之前的最后一个方法是
sucessmessage.render(请求,响应)

请求和响应是在所有的请求/响应有关的事项都应用服务器组件的特定视图。他们有这样的方法:

getServletResponse

公共HttpServletResponse的getServletResponse(布尔应答)

Gets the original servlet response. Note: This should be accessed 
只在特殊情况下

。如果参数设置为true,则运行时的所有内容处理都将被跳过。如果请求是从基于小服务程序的 连接发起的,则此项仅为 。

那么,怎样才能响应,该表单提交安全的方式进行操作,但是用户可以通过HTTP对网站的其余部分之后继续。

回答

1

看起来你似乎想在一个地方做得太多。也许下面的分解将更容易:

  • 在HTML表单中为action参数的URL指定https。
  • 创建一个使用ServletRequest.isSecure()到 的ServletFilter类,确保对表单操作的请求实际上超过了 https。这也可能出现在您的操作servlet中,但将其作为过滤器意味着您可以重用它。只要确保安全的servlet具有此过滤器组。
  • 在表单操作servlet,只需发送一个重定向到 成功页面通过http
+0

我决定只派提出通过https和重定向用户返回到http aterwards。如果用户想要查看他发送了带有弹出窗口的https链接的内容,则会显示出来。这样我就不会遇到困扰https的蜜蜂问题,并且内容被提交到安全的地方。 – macbert