Java 如何仅对特定url路径应用HttpAuthenticationMechanism?

Java 如何仅对特定url路径应用HttpAuthenticationMechanism?,java,Java,我在应用程序中按照JavaEE8JWT安全示例的结构实现基于角色的授权: 我有一个基于会话的安全性和JSF的后端应用程序。身份验证和授权由WebFilter管理: @WebFilter(urlPatterns = "/faces/*") public class AuthorizationFilter implements Filter { } 我有一个基于JWT令牌安全性的REST api,我想在其中实现用于管理身份验证和授权的HttpAuthenticationMechanism 为了

我在应用程序中按照JavaEE8JWT安全示例的结构实现基于角色的授权:

  • 我有一个基于会话的安全性和JSF的后端应用程序。身份验证和授权由WebFilter管理:

    @WebFilter(urlPatterns = "/faces/*")
    public class AuthorizationFilter implements Filter {
    } 
    
  • 我有一个基于JWT令牌安全性的REST api,我想在其中实现用于管理身份验证和授权的HttpAuthenticationMechanism

  • 为了个人利益,我希望这两种不同的安全机制彼此相邻,并证明我可以实现这两种方式。然而,HttpAuthenticationMechanism每次都会被调用,在浏览我的JSF应用程序时也是如此。这导致触发两种相互冲突的机制

    是否可以仅将HttpAuthenticationMechanism应用于某个url路径?像WebFilter中使用的urlPattern?如果是这样的话,你会怎么做

    我只想在我的rest应用程序中触发HttpAuthenticationMechanism:

    @ApplicationPath("rest")
    public class RestApplication extends Application {
    
        public RestApplication() {
        }
    }
    

    可能有更简洁的方法,但您可以实现自己的HttpAuthenticationMechanism,并将其委托给您想要使用的任何标准实现。然后,您可以让包装器检查传入的URL,并简单地返回任何有意义的URL(成功?),以便其他机制启动并执行真正的身份验证。@Steve我确实可以这样做。我已经通过制作JWTAuthenticationMechanism实现了该接口,但这感觉像是解决此问题的肮脏方式:)。如果没有更干净的方法,这是最后一个选择。谢谢你的回答!我也问了同样的问题,结果是。我在寻找更好的方法too@KoheiNozaki,感谢您分享您的解决方案。作为一个临时解决方案,它对我来说真的很有用。但是,我认为API中应该嵌入一些功能,这些功能只应用于应用程序的某个部分。