我正在做一个需要先登录的小应用程序。但是对于一些第三方工具,我想提供一个不需要登录的API。登录本身运行良好,API本身也能工作,但我不知道如何告诉Security,不需要身份验证就可以访问API。我在这里和其他网站上查看了几个主题,尝试了不同的版本,但都没有效果。每次我尝试访问API时,我都会被转发到登录表单,并且必须先登录。
到目前为止,在Security配置中,我的代码看起来是这样的:
/**
* configuration of spring security, defining access to the website
*
* @param http
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/rest/open**").permitAll()
.antMatchers("/login**").permitAll()
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.loginPage("/login")
.failureUrl("/login?error")
.defaultSuccessUrl("/dashboard")
.loginProcessingUrl("/j_spring_security_check")
.usernameParameter("username")
.passwordParameter("password")
.and()
.logout()
.logoutUrl("/j_spring_security_logout")
.logoutSuccessUrl("/login?logout")
.and()
.csrf();
}我的控制器:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PredictionOpenRestController {
@RequestMapping("/rest/open/prediction")
public String getPrediction() {
return "First Try!";
}
}不知怎么的,我不得不感觉到错过了什么。
发布于 2016-08-20 20:05:48
请参阅弹簧安全参考
我们的示例只要求用户进行身份验证,并且已经对应用程序中的每个URL进行了身份验证。我们可以通过向
http.authorizeRequests()方法中添加多个子元素来为URL指定自定义需求。例如: 受保护的空配置(HttpSecurity http)引发异常{ http .authorizeRequests() .antMatchers("/resources/**“)、"/signup”、"/about").permitAll() .antMatchers("/admin/**").hasRole("ADMIN") .hasRole和hasRole(‘DBA’)) .anyRequest().authenticated() .and() // .formLogin();} 1http.authorizeRequests()方法有多个子子,每个匹配器按声明的顺序考虑。 2我们指定了任何用户都可以访问的多个URL模式。具体来说,如果URL以"/resources/“开头,等于"/signup”或等于"/about“,则任何用户都可以访问请求。 3任何以"/admin/“开头的URL都将重新标记给具有"ROLE_ADMIN”角色的用户。您将注意到,由于我们正在调用hasRole方法,因此不需要指定"ROLE_“前缀。 4任何以"/db/“开头的URL都要求用户同时拥有"ROLE_ADMIN”和"ROLE_DBA“。您将注意到,由于我们使用的是hasRole表达式,所以不需要指定"ROLE_“前缀。 5任何尚未匹配的URL只需要对用户进行身份验证
第二次使用.authorizeRequests()将覆盖第一次使用。
还请参见AntPathMatcher
映射使用以下规则匹配URL:
?匹配一个字符*匹配零或多个字符**匹配路径中的零或多个目录。 示例com/t?st.jsp-匹配com/test.jsp,但也匹配com/tast.jsp或com/txst.jspcom/*.jsp-匹配com目录中的所有.jsp文件com/**/test.jsp-匹配com路径下的所有test.jsp文件org/springframework/**/*.jsp-匹配org/springframework路径下的所有.jsp文件org/**/servlet/bla.jsp-匹配org/springframework/servlet/bla.jsp,但也匹配org/springframework/testing/servlet/bla.jsp和org/servlet/bla.jsp
修改后的代码:
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/rest/open/**").permitAll()
.antMatchers("/login/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.failureUrl("/login?error")
.defaultSuccessUrl("/dashboard")
.loginProcessingUrl("/j_spring_security_check")
.usernameParameter("username")
.passwordParameter("password")
.and()
.logout()
.logoutUrl("/j_spring_security_logout")
.logoutSuccessUrl("/login?logout")
.and()
.csrf();
}https://stackoverflow.com/questions/39052457
复制相似问题