[英]Spring Security - doesn't access database
我使用的是Spring Boot,并且是Spring Security的新手,但是我想要Web应用程序的基本安全性。 我所做的就是在pom.xml中添加所需的依赖项,并将此java类添加到我的项目中:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/**","/event/**","/ticket/**")
.hasRole("USER")
.and()
.formLogin();
}
}
运行我的Web应用程序后,我进入登录页面,在其中输入用户名/密码,然后转到我的Web应用程序。 但是,这些命令不起作用。 我按了一些应该向MySql数据库发送信号的按钮,但是什么也没有发生。 就像前端不再连接到后端一样。 我正在使用AngularJS作为前端,以及在页面之间导航的View Controller。 该应用程序的其余部分基于REST。 知道为什么会发生这种情况吗?
稍后编辑:现在,我明白了,我遇到的问题是,在进行身份验证之后,我在端点上获得了403状态代码。 知道我该如何解决吗?
以后的Editv2:看起来我未获得POST请求的授权,我的GET请求工作正常...这是我的一些POST端点:/ event / buy_ticket / {id},/ ticket // cancel_ticket / { ID}
angular.min.js:101 POST http://localhost:8080/event/buy_ticket/2 403 ()
我什至试图明确地说出它允许它,但我仍然得到403 ...
http.authorizeRequests()
.antMatchers("/**","/event/**","/ticket/**","/event/buy_ticket/2")
.permitAll()
.and()
.formLogin();
以后以后以后编辑:
禁用CSRF工作
得到403 Forbidden错误代码意味着Spring正在接收您的请求,但选择停止处理它们。 在HTTP 403的Wiki页面上:
提供了身份验证,但是不允许经过身份验证的用户执行请求的操作。
如果不得不下注,我会说问题是您尚未指定应访问哪些资源和端点以及如何访问。 如果内存适合我,那么默认情况下,Spring Security会非常紧密地锁定所有内容,因此您需要明确告诉它保持打开状态。 以下是我自己的安全配置的示例:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests() // require authorization
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll() // for the CORS preflight check
.antMatchers("/login", "/api/open/**", "/resources/**").permitAll() // the open API endpoints and resources
.antMatchers("/logout", "/api/secured/**").authenticated(); // lock down these endpoints
...additional configurations...
}
应该自由可用的所有端点都以"/api/open/"
开头,而应该由Spring Security保护的所有端点都以"/api/secured/"
开头。 登出和登录端点是例外,因为它们直接绑定到Spring Security。
这是一篇很棒的博客文章 -及其相关的仓库 -展示了如何实现与AngularJS配合使用的Spring Security,甚至作为单页应用程序也是如此,这是众所周知的烦人的安全方法。
编辑:您可能正在使用CSRF保护,该保护在Spring Security中默认启用-请参阅此文章 。 CSRF将允许HTTP“安全”方法(例如GET,HEAD和OPTION),但会阻止“不安全”方法(例如PUT,POST,DELETE等),如果这些方法未提供正确的令牌(由于未配置CSRF,则这些请求不会拥有令牌->被阻止)。 为了进行测试,您可以通过将http.csrf().disable()
到configure()
方法中来禁用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.