我正在开发一个使用Spring Security工具箱来授权“权限”请求的Web服务。当然,Web服务有一个扩展到WebSecurityConfigurerAdapter
类的配置类,并覆盖configure(HttpSecurity http)方法。
在该方法中,我使用以下代码编写了配置文件(角色或权限):
http
.authorizeRequests()
.antMatchers("/**").hasAnyAuthority("PERFIL")
.anyRequest().authenticated()
.and()
.logout().clearAuthentication(true)
.invalidateHttpSession(true)
.and()
.csrf().disable();
它运行良好,但我想从数据库收取动态配置文件(角色或权限),因为我想在不更改Web服务的情况下更改它们。
有人知道怎么做吗?
问候。
答案 0 :(得分:0)
为了从数据库传递这些细节,您需要更改许多配置。
使用 jdbc-user-service 定义查询以执行数据库身份验证。
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query=
"select username,password, enabled from users where username=?"
authorities-by-username-query=
"select username, role from user_roles where username =? " />
</authentication-provider>
</authentication-manager>
按照this教程了解Spring Security的工作原理。
答案 1 :(得分:0)
您可以找到完整的工作示例here。
虽然我的项目中的逻辑是相反的,但您可以提取有助于您的案例的信息(如如何“注入”弹簧安全性这些权限)
在“权威”类中,我定义了2个静态authorities。这是您可以从数据库中获取权限的点。你可以有一个空的List<Authority>
,它会在你的应用程序启动时自动从db中填充(参见@PostConstruct
)。
您的权威类应该像GrantedAuthority中一样实现spring here。