Java spring-rest/Jersey如何安全的休息路由与过滤器

10 java spring jersey spring-security spring-boot

我在pom.xml实际保护 路由的过程中使用以下内容,我看到认证过程在浏览器中启动几秒钟

  <filter>
    <filter-name>CsrfFilter</filter-name>
    <filter-class>org.apache.catalina.filters.RestCsrfPreventionFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>CsrfFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
Run Code Online (Sandbox Code Playgroud)

现在,我有特定的路线,当用户选择时我需要保护...

@Path("/run")
public class Service {


...

@GET
@Path("connect/{param}")
public Response connectToHost(@PathParam("param") String host) {
Run Code Online (Sandbox Code Playgroud)

我应该怎么做?通过如上所述的pom配置或通过每条路线的代码?

vso*_*oni 6

你的问题中有一些令人困惑的地方,但我会试着尽我所能.

一.过滤器设置 - 根据您的问题,您进行了过滤器设置pom.xml.但实际上过滤器设置总是在web.xml文件中进行.如果您错误地命名为pom.xml,则忽略但如果没有,则将过滤器设置移至web.xml.

二.在您的问题标签中,您提到您的查询与spring-boot,spring-security有关.但是您附加的代码示例表明您可能正在使用jersey来创建rest apis而不使用spring,spring-security.您实际上是尝试在tomcat服务器级别使用较低级别的csrf保护.没关系.

三.CSRF保护可以与spring security以及tomcat apis一起使用.

四.如果您想了解Spring安全性如何为休息端点提供csrf保护,则必须在代码中提供以下配置.

@EnableWebSecurity
public class WebSecurityConfig extends
        WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf()
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    }
}
Run Code Online (Sandbox Code Playgroud)

这将为您的应用程序的所有POST,PUT,PATCH,DELETE请求提供csrf保护.有关详细信息,请参阅https://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html.

五.现在,您的实际问题是如何为基于球衣的休息端点的多条路线提供csrf保护......您可以提供多个网址模式,如下所示.

<filter>
    <filter-name>CsrfFilter</filter-name>
    <filter-class>org.apache.catalina.filters.RestCsrfPreventionFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CsrfFilter</filter-name>
    <url-pattern>/run</url-pattern>
    <url-pattern>/path1</url-pattern>
    <url-pattern>/path2</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅https://tomcat.apache.org/tomcat-8.0-doc/config/filter.html#CSRF_Prevention_Filter_for_REST_APIsRestCsrfPreventionFilter.