就Spring security而言,它对我来说是全新的。我在网上找到了许多描述如何设置基本安全性的资源,并且能够让HTTPS REST调用在服务器端使用以下配置:
@Configuration
@EnableWebSecurity
@EnableConfigurationProperties(SecurityAuthProperties.class)
public class ServerSecurityConfiguration extends WebSecurityConfigurerAdapter {
private final SecurityAuthProperties properties;
@Autowired
public ServerSecurityConfiguration(SecurityAuthProperties properties) {
this.properties = properties;
}
@Override
public void configure(HttpSecurity http) throws Exception {
properties.getEndpoints().forEach((key, value) -> {
try {
for (HttpMethod method : value.getMethods()) {
http.authorizeRequests().antMatchers(method, value.getPath()).permitAll().and()
.httpBasic().and().csrf().disable();
}
} catch (Exception e) {
throw new SecurityConfigurationException(
"Problem encountered while setting up endpoint restrictions", e);
}
});
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/rst/**").permitAll();
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
在我看来,这段代码允许访问路径/rst
及其下的任何内容,但似乎恰恰相反。我错过了什么?
注意:我要提到的另一件事是,目前没有“用户”身份验证。“客户端”不是基于web的,而是一个单独的Spring Boot服务,它有自己的客户端安全配置。
更新:
@RestController
@RequestMapping("/rst/missionPlanning")
public class MissionPlannerController {
@Autowired
private MissionPlanner service;
@Autowired
private ThreadPoolTaskExecutor executor;
@PostMapping(value = "/planMission", produces = MediaType.APPLICATION_JSON_VALUE)
public DeferredResult<ResponseEntity<GeneralResponse>> planMission() {
DeferredResult<ResponseEntity<GeneralResponse>> result = new DeferredResult<>(60000L);
executor.execute(new Runner(result));
return result;
}
private class Runner implements ITask {
private DeferredResult<ResponseEntity<GeneralResponse>> result;
public Runner(DeferredResult<ResponseEntity<GeneralResponse>> result) {
this.result = result;
}
@Override
public void executeTask() {
// Invoke service and set result.
result.setResult(ResponseEntity.ok(service.planMission()));
}
}
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().antMatchers("/rst/**").permitAll();
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
您设置控制器的方式可能有问题。包含该路径的控制器是否具有@requestmapping(“/rst”)
?
如果你用你的控制器的样子更新你的帖子会很有帮助。
编辑:看来你的问题是在你必须禁用CSRF时所提出的请求的类型。
您可以在此阅读更多信息:https://docs.spring.io/spring-security/site/docs/3.2.0.ci-snapshot/reference/html/csrf.html#csrf-include-csrf-token
在这里:https://www.baeldung.com/spring-security-csrf
在调试级别进行日志记录时,我看到了Spring Security的以下反馈: 我试图实现的是有一个可以在任何时候调用的方法,它将发送一个答复,指示请求是否在登录的会话中。
我有一个方法,我想允许匿名和身份验证访问。 我正在使用Spring Security3.2.4和基于java的配置。 在调试级别进行日志记录时,我看到了Spring Security的以下反馈: 我试图实现的是有一个可以在任何时候调用的方法,它将发送一个答复,指示请求是否在登录的会话中。
我正在我的应用程序中实现Spring Security,我想允许所有人使用,我尝试使用 我得到了, 这是我的配置课 这是我的yml配置: 有人可以在这里帮助我吗?
我是不是漏掉了什么?提前感谢!
问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您