2017-06-02 225 views
0

我使用的是春季启动,对于弹簧安全性来说很新,但我希望我的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个状态码。任何想法我可以修复它?我的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工作

+0

不,验证码有效。问题随之而来,当我在页面上做事情时什么都没有发生 – Gimv13

+0

你是否从你的api端点获得了403个响应? –

+1

是的,我得到403 – Gimv13

回答

1

获取403禁止的错误代码意味着Spring正在接收您的请求,但选择停止处理它们。从Wiki页面上HTTP 403

认证是提供的,而是通过验证的用户是不是 允许执行请求的操作。

如果我不得不下注,我会说问题在于你没有指定应该访问哪些资源和端点以及如何访问。如果内存为我服务,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/"的开头,而应该由春季安全的保护所有端点与"/api/secured/"开头。例外是注销和登录端点,因为它们直接绑定到Spring Security。

这是一个伟大的blog post - 以及相关repo - ,展示了如何实现Spring Security的播放与AngularJS不错,甚至作为一个单页应用程序,这是众所周知的恼人的安全。

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

+1

是的,这是csrf。非常感谢你 :) – Gimv13