繁体   English   中英

Spring Security-无法访问数据库

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM