Java Spring安全性-不访问数据库

Java Spring安全性-不访问数据库,java,mysql,angularjs,spring,spring-security,Java,Mysql,Angularjs,Spring,Spring Security,我使用的是SpringBoot,而且是SpringSecurity的新手,但我希望我的web应用程序具有基本的安全性。我所做的是在pom.xml中添加所需的依赖项,并将这个java类添加到我的项目中: @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(Authenti

我使用的是SpringBoot,而且是SpringSecurity的新手,但我希望我的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作为前端和在页面之间导航的视图控制器。应用程序的其余部分是基于Rest的。知道为什么会这样吗

稍后编辑:现在我明白了,我遇到的问题是,经过身份验证后,我的端点上有403个状态码。你知道我该怎么修吗

Later 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个禁止的错误代码意味着Spring正在接收您的请求,但选择停止处理它们。从上的Wiki页面:

已提供身份验证,但未提供经过身份验证的用户 允许执行请求的操作

如果我不得不打赌,我会说问题在于您没有指定应该访问哪些资源和端点以及如何访问。如果我没有记错的话,默认情况下,SpringSecurity将超级紧密地锁定所有内容,所以您需要明确地告诉它什么是打开的。以下是我自己的安全配置示例:

@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安全性保护的端点都以/api/secured/开头。例外情况是注销和登录端点,因为它们与Spring安全性直接相关

这里有一个很好的——以及相关的——展示了如何实现Spring安全性,该安全性可以很好地与AngularJS配合使用,甚至可以作为一个单页应用程序,这是出了名的令人讨厌的安全性


编辑:您可能遇到了CSRF保护,这在SpringSecurity中是默认启用的-请参见此。CSRF将允许HTTP安全方法,如GET、HEAD和OPTION,但会阻止不安全方法,如PUT、POST、DELETE等。如果这些方法没有提供正确的令牌,因为没有配置CSRF,则这些请求没有令牌->阻止。出于测试目的,您可以通过将http.csrf.disable添加到configure方法来禁用它。

否,身份验证有效。问题是,当我在我的页面上做事情时,什么都没有发生。你从你的api端点得到403个响应吗?是的,我得到403个响应。是的,是csrf。非常感谢你: