2017-07-28 84 views
-1

我有弹簧安全的弹簧web应用程序,我使用休息服务来访问数据。我对此有两个问题。如何使弹簧安全允许使用休息服务

首先,我不能让Spring安全性允许我发送POST HTTP请求并向数据库添加内容。我试图允许这个请求,但春天的安全仍然拒绝访问。

http.authorizeRequests().antMatchers("/services/rest/registerUser").permitAll(); 

第二个问题,保护休息服务的最佳做法是什么?我绝对不想让别人通过休息服务向数据库发送数据。那么允许从我的应用程序内部使用服务并限制其他每个休息请求的最佳方式是什么?

+1

您需要启用'permitAll'的匿名访问才能工作。没有它,你不会有一个认证对象,访问仍然失败。您可以忽略所有内容,但是这样您也会丢失在请求中设置的安全标头。 –

回答

0

您可以在WebSecurityConfigurerAdapter中使用configure(WebSecurity web)超载的方法,并执行以下操作;

public void configure(WebSecurity web) { 
    web.ignoring().antMatchers("/services/rest/registerUser"); 
} 

此外,如果你允许系统从您的REST API被放置在另一台主机上访问您的REST API,那么你需要使用CORS标头。

what is the best practice with securing rest services? I definitely don't want to let someone send data to database through rest services. So what is the best way to allow using services from inside of my app and restrict every other rest request? 

最广泛使用和安全的保护REST Apis的方法是使用OAuth2。您可以使用Spring Security OAuth2项目来实现此目的。

另一种方法是使用JWT令牌,这也可以使用Spring Security和一些代码来实现。

+0

谢谢你的信息。而我只是好奇,忽略Web请求确实有效,但是你有什么想法,为什么我的代码使用'permitAll()'不允许我发布该请求? – wdc