gpt4 book ai didi

java - Togglz 在功能切换时返回 403

转载 作者:行者123 更新时间:2023-11-30 06:04:55 24 4
gpt4 key购买 nike

我已将 togglz 实现到我的 Spring Boot 应用程序中。我什至可以访问 Togglz 控制台,并且我已经使用 FeatureManager 测试了这些限制。但是,如果我转到 togglz 控制台并尝试更改激活策略或启用/禁用某个功能,我会收到 403 Forbidden 错误页面。

换句话说,我可以访问/togglz/index,但无法访问/调用/togglz/edit

在我的 WebMvcConfigurer 类中:

@Bean
public FilterRegistrationBean<TogglzFilter> togglzRegistration() {
FilterRegistrationBean<TogglzFilter> reg = new FilterRegistrationBean<>();
reg.setFilter(new TogglzFilter());
reg.addUrlPatterns("/*");
reg.setName("TogglzFilter");
return reg;
}

@Bean
public ServletRegistrationBean<TogglzConsoleServlet> togglzConsoleServlet() {
ServletRegistrationBean<TogglzConsoleServlet> reg = new ServletRegistrationBean<>();
reg.setServlet(new TogglzConsoleServlet());
reg.setName("TogglzConsoleServlet");
reg.addUrlMappings("/togglz/*");
return reg;
}

在我的 Togglz 配置中:

@Component
public class TogglzConfiguration implements TogglzConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(TogglzConfiguration.class);

@Autowired
private ResourceLoader resourceLoader;

@Override
public Class<? extends Feature> getFeatureClass() {
return Features.class;
}

@Override
public StateRepository getStateRepository() {
try {
return new FileBasedStateRepository(
resourceLoader.getResource("classpath:/togglz.properties").getFile()
);
} catch (IOException ex) {
LOGGER.error(ex.getMessage(),ex);
throw new RuntimeException(ex);
}

}

@Override
public UserProvider getUserProvider() {

return new UserProvider() {
@Override
public FeatureUser getCurrentUser() {
return new SimpleFeatureUser("admin", true);
}
};
}


}

我的功能类:

public enum Features implements Feature {

@Label("Inventory Initiation")
@TestingUI
TESTING_UI_INITIATE_INVENTORY,

@Label("Random Warehouse Creation")
@TestingUI
TESTING_UI_CREATE_WAREHOUSE
;


public boolean isActive() {
return FeatureContext.getFeatureManager().isActive(this);
}

}

最佳答案

看起来您正在应用程序中使用某种 CSRF 保护。至少这可以解释为什么只有 POST 请求被破坏。

Togglz 控制台提供了一个 SPI,用于获取需要嵌入表单中的 CSRF token :

https://github.com/togglz/togglz/blob/master/servlet/src/main/java/org/togglz/servlet/spi/CSRFTokenProvider.java

Togglz 附带了对 Spring Security CSRF 保护的支持:

https://github.com/togglz/togglz/blob/master/spring-security/src/main/java/org/togglz/spring/security/SpringSecurityTokenProvider.java

Togglz 正在使用 JDK 的 ServiceLoader 工具来查找提供程序。因此,对于 Spring Security,只有一个引用实现类的文件:

https://github.com/togglz/togglz/blob/master/spring-security/src/main/resources/META-INF/services/org.togglz.servlet.spi.CSRFTokenProvider

因此,如果您想将某些第三方 CSRF 保护框架与 Togglz 集成,您必须:

  • 实现CSRFTokenProvider
  • 将文件 META-INF/services/org.togglz.servlet.spi.CSRFTokenProvider 添加到您的类路径中,并向其中添加实现类的完全限定类名。

关于java - Togglz 在功能切换时返回 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51534366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com