我是Spring新手,我需要为我的其他控制器的8/10个URL启用基本身份验证,而其他2个应该可以在没有任何基本身份验证的情况下访问。 我正在使用gradle来构建应用程序,因此没有涉及的xml文件。 (我看到一些带有web.xml的解决方案,我没有一个) 这是我的网络安全配置:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
super.configure(web);
web.ignoring().antMatchers("/abcd/**");
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("password");
}
}
这是我的控制器:
@RestController
@RequestMapping(value = "/abcd")
public class PaymentController implements ElasticSearchConstants {
@RequestMapping(value = "/sample", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public static void authExpemtedController(HttpServletRequest request, HttpServletResponse response) throws Exception {
//do something
}
}
我尝试了web.ignoring()。antMatchers(" / abcd /");没有帮助。当我从邮递员那里尝试时,我总是收到401错误: { "时间戳":1492274727955, " status":401, "错误":"未经授权", " message":"访问此资源需要完全身份验证", "路径":" / abcd / sample" }
我需要公开这样的API,不需要任何身份验证,而其他API需要进行身份验证。
感谢您的帮助
更新: 我知道http.authoriseRequest()。antMatchers(" / abcd")。permitAll() 此方法仅允许任何用户访问。我不想将任何用户信息传递给此API。
答案 0 :(得分:2)
您可能需要参考Section 5.4 Authorize Requests of the Spring Security docs:
我们的示例仅要求用户进行身份验证,并且已针对应用程序中的每个URL进行了身份验证。我们可以通过向http.authorizeRequests()方法添加多个子项来指定URL的自定义要求。例如:
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**", "/signup", "/about").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")
.anyRequest().authenticated()
.and()
// ...
.formLogin();
}