java - 使用带有 ajax 请求的表单调用 Servlet (FIlter)(必须使用授权 header )

标签 java jquery ajax servlets header

我不明白为什么它不起作用。也许问题出在 url 模式上?或者我不明白数据流?注意只能修改login.jsp。响应查看链接授权 header 未设置。我尝试了网上找到的所有东西,但它不起作用。也许你可以提示我一个教程来做到这一点。预先感谢您的宝贵时间。

登录.jsp

<html>
  <head>
<title>Login</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<script>
    $(document).ready(function(){
        $("#lsubmit").click(function(){
            var username = $("#lmail").val();
            var password = $("#lpsw").val();

            $.ajax({
                url : '/seller/*',
                method : 'POST',
                data: '{"username": "' + username + '", "password" : "' + 
                password + '"}',
                beforeSend : function(req) {
                    req.setRequestHeader('Authorization', "inserirebase48");
                }
            });
        });
    });
</script> </head>
<body>
 <form>
Email: <input type="text" id="lmail"><br>
Password: <input type="password" id="lpsw"><br>
<input type="button" id="lsubmit" value="Login">
 </form>
</body>
</html>

web.xml 的一部分

 <filter>
    <filter-name>filterAuthenticationSeller</filter-name>
    <filter-class>servlets.FilterAuthenticationSeller</filter-class>
</filter>
<filter-mapping>
    <filter-name>filterAuthenticationSeller</filter-name>
    <url-pattern>/seller/*</url-pattern>
</filter-mapping>

FilterAutheniticationSeller.java

package servlets;

 import utils.authenticationManager.AuthenticationService;

 import javax.servlet.*;
 import javax.servlet.annotation.WebFilter;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;

import static utils.Utils.createResponse_UNAUTHORIZED;
@WebFilter(filterName = "FilterAuthenticationSeller")

public class FilterAuthenticationSeller implements Filter {

    AuthenticationService authenticationService = new 
       AuthenticationService();


      public void init(FilterConfig config) { }


       public void destroy() { }


public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {

    if(servletRequest instanceof HttpServletRequest) {

        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;

        // if registration :  POST (path: '/users' + body) go on the next servlet
        // if login : POST (path: '/users/0' + body ) go on the next servlet
        if(httpServletRequest.getMethod().equals("POST")
                && httpServletRequest.getServletPath().contains("users")
                && (httpServletRequest.getPathInfo() == null || httpServletRequest.getPathInfo().equals("/0"))) {
            filterChain.doFilter(servletRequest, servletResponse);
            return;
        }

        // else, check user and go on OR unauthorized
        String authorization = httpServletRequest.getHeader("Authorization");
        boolean authenticated = authenticationService.authenticateSeller(authorization);
        if(authenticated)
            filterChain.doFilter(servletRequest, servletResponse);
        else

            createResponse_UNAUTHORIZED((HttpServletResponse) servletResponse);
    }
}

}

最佳答案

尝试从ajax帖子中删除seller/*并指定正确的目标url

关于java - 使用带有 ajax 请求的表单调用 Servlet (FIlter)(必须使用授权 header ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56563457/

相关文章:

java - 如何改进使用 BasicDataSource 对象的 Java 应用程序?

javascript - 通过一系列 promise (JS 继承/接口(interface))编译结果

javascript - JQuery AJAX 'post' 数据无法到达 Web api Controller

c# - 如何使用 AJAX 调用 ASP.NET 根页面中的 Web 方法

javascript - 在 React Flux 中哪里进行 Ajax 调用

java - ArrayList - 在 ArrayList 中存储对象的多个值

java - 在服务器端为 ColdFusion 实现 Showdown.js markdown 解析器

javascript - 使用 javascript 检测页面上的 XHR

java - 如何在基于代理的Spring bean中设置模拟对象?

jquery - bootstrap 4 文件输入不显示文件名