java - Spring Security - 角色检查永久失败
问题描述
我正在尝试学习 Spring Security 并希望保护 API。我一方面想要一个带有数据库身份验证的登录表单,另一方面想要一个 OAuth2 身份验证。但我被困在第一个任务上。问题是应用程序不接受我的角色,我不知道为什么。
这是我的配置类:
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
DataSource dataSource;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("SELECT username,password,enabled FROM users WHERE username=?")
.authoritiesByUsernameQuery("SELECT username, authority FROM authorities WHERE username=?");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/createTrack").hasRole("CREATOR")
.antMatchers("/getTrack").hasAnyRole("CREATOR", "USER")
.antMatchers("/test").hasRole("CREATOR")
.antMatchers("/all").permitAll()
.and().formLogin();
}
@Bean
public PasswordEncoder getPasswordEncoder() {
// TODO: Change this to hashed password (this is for demo purposes)
return NoOpPasswordEncoder.getInstance();
}
}
一切都像 Spring 文档中描述的那样:https ://docs.spring.io/spring-security/site/docs/current/reference/html5/#servlet-authentication-jdbc
我制定了我的 API 的一些端点来测试登录用户的名称和角色。一切正常 - 登录似乎很好,角色也正确。
但是,当我尝试调用一个只能由一个或两个特定角色访问的端点时,它会得到一个 403 错误响应。
我究竟做错了什么?我尝试了很多东西,但它仍然不起作用。
谢谢!
PS:我正在使用 MyBatis(我公司的任务) - 如果这有什么关系吗?
解决方案
谢谢你们的帮助!Toerktumlare 的回答让我找到了解决方案。我按照您的建议打开了调试日志记录。CORS 不是问题,但阅读调试消息让我走上了正确的道路。
不过问题很小。我将数据库中的角色存储为“CREATOR”或“USER”。调试消息显示Spring 正在寻找“ROLE_CREATOR”或“ROLE_USER”,并且 - 因为我的角色没有以这种方式保存 - 没有找到它们。因此我得到了 403 HTTP 响应。
推荐阅读
- ios - 如何解决“无法分配 'UIImageView' 类型的值?” 输入'UIImage?'”问题?
- html - HTML CSS:对齐文本框中的部分,标题顶部和中间的描述
- c# - 有没有办法将 System.Data.DataTable 转换为 Spark DataFrame?
- automation - 如何在imageJ中自动获取图像的比例
- r - 根据 R 中前 n 行的条件创建一个新列
- tcpdf - 为什么 PDF 在大窗口或高屏幕分辨率下打开?
- cmake - CMAKE 有条件地运行 cppcheck
- ruby-on-rails - nil:NilClass 的未定义方法 `map' 你的意思是?点击 - 如何解决?
- python - 如何将 C++ 中的空字符序列转换为 Python 中的等效字符?
- elasticsearch - 过滤条件的 Elasticsearch DSL 语法