2017-08-25 58 views
0

我有一个使用Servlet doGet方法打开页面的JavaScript函数。 像JS:从doGet更改为doPost以确保安全

var a = "xxx?key=value"; 
window.open(a); 

这里XXX被映射到AAA的Servlet延伸的Http Servlet和在该Servlet的逻辑被写入doGet方法。

但主要的问题是,因为它是一个get方法,所以整个参数列表(使用Java脚本发送的键和值对)都可以在URL中看到。我怎样才能改变这种做法以隐藏URL中的数据,以确保它的安全,并且不能在URL中看到数据。

任何其他选项也是受欢迎的。

谢谢!

+0

还是会是一个更好的想法JS加密密钥值和Servlet类保持它的doGet解密呢? – Soham

+0

您似乎对GET和POST请求的语义感到困惑。如果你想要取回某些东西,使用GET请求,如果你想“POST”某些东西(换句话说,创建一个新的资源),你可以使用POST请求。在请求正文中发送查询参数并不会使它更安全,要加密连接,请使用HTTPS – Dummy

回答

0

当你打开新标签页或窗口时,你需要设置URL(使用你的get参数)。 现在你有一个选择(使用阿贾克斯):

  1. 创建一个新的页面或视图。
  2. 用简单的<a target="_blank" href="url">打开新页面。
  3. 使用javascript函数向servlet发出异步请求(ajax)。
  4. 用结果填充视图。

有一个servlet是这样的:

@WebServlet("/SampleServlet") 
public class SampleServlet extends HttpServlet { 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String parameter1 = request.getParameter("param1"); 
     String parameter2 = request.getParameter("param2"); 

     //Process request, build response 
     //You can return your prefered data type (html, xml...)  

     String jsonResponse = new Gson().toJson(new MyResponseObject(parameter1, parameter2)); 

     response.setContentType("application/json"); 
     response.setCharacterEncoding("UTF-8"); 
     response.getWriter().write(jsonResponse); 
    } 
} 

和 “新观点”(包括JQuery的LIB):

<html> 
<head> 
    ... 
    <script> 
    $(document).ready(function(){ 
     $.ajax({ 
      url: '/SampleServlet',    
      type: "post",   
      data: { 
       param1: "param1Value", 
       param2: "param2Value", 
      }, 
      dataType: 'json', //or html, xml...  
      success: function(data) {    
       //populate page body with servlet response (json, html, etc)     
      } 
     }); 
    });  
    </script> 
</head> 
<body> 
    <!-- page content here --> 
</body> 
</html> 
+0

这会在页面加载后立即触发ajax请求 –

+1

@Jonathan Laliberte是的,您是对的,但这是要求Soham的:) –

0

总结以下JavaScript使用某种类型的事件(点击,功能等。):

var param = { 
    key: "value" 
}; 

$.post("someservlet", $.param(param), function(response) { 
    // ...response is here if needed 
}); 

而在servlet中,您只需获取va略像正常的,

String key = request.getParameter("key"); 

How to use Servlets and Ajax?