当前位置: 首页 > 知识库问答 >
问题:

访问Web应用程序或命中url时未调用自定义Spring过滤器

贺雪松
2023-03-14

下面是我在网络上的配置。xml和我有一个JwtFilter,但当调用rest URL时,它无法访问。

网状物xml

<web-app
<display-name>Portal Web</display-name>

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/mvc-dispatcher-servlet-spring-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>jwtFilter</filter-name>
    <filter-class>com.pingle.lola.authentication.JwtFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>jwtFilter</filter-name>
    <url-pattern>/portal/lola/*</url-pattern>
</filter-mapping>

这是我的JwtFilter

public class JwtFilter extends GenericFilterBean {

@Override
public void doFilter(final ServletRequest req,
                     final ServletResponse res,
                     final FilterChain chain) throws IOException, ServletException {
    final HttpServletRequest request = (HttpServletRequest) req;
    System.out.println("came here");
    final String authHeader = request.getHeader("Authorization");
    System.out.println("came here - " + authHeader);
    if (authHeader == null || !authHeader.startsWith("Bearer ")) {
        System.out.println("should throw");
        throw new ServletException("Missing or invalid Authorization header.");
    }

    final String token = authHeader.substring(7); // The part after "Bearer "
    System.out.println("came here" + token);

    try {
        final Claims claims = Jwts.parser().setSigningKey("secretkey")
            .parseClaimsJws(token).getBody();
        request.setAttribute("claims", claims);
    }
    catch (final SignatureException e) {
        throw new ServletException("Invalid token.");
    }

    chain.doFilter(req, res);
}

}

我有基本的RestAPI混淆的控制器。我正在尝试检查是否有任何URL像localhost:8080/portal/lola/getData一样被击中...它应该转到JwtFilter并检查请求标头中的身份验证令牌,如果有效,则将其传递给控制器,否则会抛出错误消息。逻辑编写正确,但未调用过滤器,当我点击上面的URL时,它会直接进入控制器而不会到达过滤器。

我的Spring配置。xml

<context:component-scan base-package="com.pingle.lola.controller"/>
<mvc:annotation-driven/>

//不知道为什么我在它没有映射到任何控制器时创建了它:(

    <mvc:default-servlet-handler/>

共有1个答案

蒋联
2023-03-14

似乎/port是应用程序上下文的名称。过滤器url模式不应包含上下文名称。这意味着,过滤器url模式应该是/lola/*而没有/port。尝试将过滤器映射更改为:

<filter-mapping>
    <filter-name>jwtFilter</filter-name>
    <url-pattern>/lola/*</url-pattern>
</filter-mapping>
 类似资料:
  • 嗨,我正在学习Spring安全,我被困在自定义认证过滤器中。我有以下文件:主应用程序文件: : 我的安全配置文件安全: 最后我的CustomAuthentication filter文件:< code > customauthenticationfilter . Java : 因此,我已经将<code>attemptAuthentication</code>方法放在日志中,但似乎请求没有到达那里。

  • 我有一个Spring项目,我尝试添加一个自定义反序列化器来反序列化日期属性,具体取决于它们的格式。如果我将其用作Date属性的注释,则效果很好。但是,如果我将反序列化器添加到对象映射器中,当Jackson反序列化日期时,它不会调用。 我尝试这样应用我的自定义反序列化程序: 我不想每次都对Date属性应用注释,我想默认使用此反序列化器。我做错了什么?

  • 我正在尝试为resty gwt编写我的自定义调度程序。 我的dispatcher将包含两个过滤器: 基本CauthHeaderDispatcherFilter(将添加到每个请求安全令牌), 我有一个问题,我的过滤器是由gwt/restygwt注册的,不幸的是它们不工作。 以下是代码: gin客户端模块 RestyGwtConfig RestyDispatcher 禁止调度过滤器 禁止调度员回调 B

  • 我试图为当前登录的用户添加一些自定义数据,所以我发现我可以实现自己的UserDetailsService并将其插入Spring中,但它从未被调用,我总是以用户名字符串的形式获得主体。 我有我的UserDetailsService实现: 我的UserDetails实现: 并尝试通过多种方式在config(SecurityConfiguration)中设置它:

  • 我有一个不能用Gson正确序列化的类(类只是name和HashMap),所以我编写了一个自定义序列化程序来从HashMap中打印名称和键值对。 此外,这是实际打印的内容,序列化整个对象并不像我所期望的那样工作,也不只是直接打印对象。 任何帮助都将不胜感激。

  • 问题内容: 我正在尝试为resty gwt编写我的自定义调度程序。 我的调度程序将包含两个过滤器: (将添加到每个请求安全令牌中), (将包含回调)-如果用户未登录,他的工作是重定向到登录页面。 我有问题,我的过滤器是由gwt / restygwt注册的,不幸的是它们不起作用。 这是代码: 杜松子酒客户端模块 RestyGwtConfig RestyDispatcher ForbiddenDisp