从doGet更改为doPost以确保安全性

时间:2017-08-25 16:29:03

标签: javascript java servlets

我有一个javascript函数,它使用Servlet doGet方法打开一个页面。 就像IN Js:

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

这里xxx被映射到AAA Servlet,它扩展了Http Servlet,在那个Servlet中,逻辑是用doGet方法编写的。

但主要问题是,因为它是一个get方法,所以在URL中可以看到整个参数列表(我使用Java脚本发送的键和值对)。如何将其更改为doPost以隐藏URL中的数据,以使其安全且无法在URL中查看数据。

也欢迎任何其他选择。

谢谢!

2 个答案:

答案 0 :(得分:0)

当您打开新标签页或窗口时,您需要设置URL(使用get参数)。 现在你有一个选项(使用ajax):

  1. 创建新页面或视图。
  2. 使用简单的<a target="_blank" href="url">打开新页面。
  3. 使用javascript函数向servlet发出异步请求(ajax)。
  4. 使用结果填充视图。
  5. 拥有这样的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>
    

答案 1 :(得分:0)

使用某种事件(点击,功能等)包装以下javascript:

await

在servlet中你只需得到正常的值,

@action
public async getTags() {
  const tags = await Api.getTags();
  this.tags.replace(tags);
}

How to use Servlets and Ajax?