Spring security从数据库授权Requests值

时间:2015-07-29 15:18:39

标签: java spring-mvc spring-security

我想在服务器启动时从数据库配置Authorize Requests值。目前我在Java类文件中给出了硬核值,有没有办法从数据库中读取相同内容。

以下是示例代码:

$data->data_r

如何从数据库中读取url,例如:/ admin / **来自数据库,而不是类文件中的硬编码值

2 个答案:

答案 0 :(得分:8)

您可以使用Spring JDBC支持。首先,您需要设置数据库。然后,您可以检索行并对其进行适当处理。

您应该有一个表格,其中有行,而且列中填充的内容有/admin/**/db/**。另一列应填充角色访问信息。之后,按照本教程,您应该检索这些行。我们假设你有以下实体类:

class Matcher {
   public String name;
   public String roleInfo;
}

然后,您可以遍历Matcher个实体进行配置:

    http.authorizeRequests()
            .antMatchers("/resources/**", "/signup", "/about").permitAll();

    for (Matcher matcher : matchers) {
        http.authorizeRequests().antMatchers(matcher.name).access(matcher.roleInfo);
    }
    http.authorizeRequests().anyRequest().authenticated()
            .and()
                    // ...
            .formLogin();

答案 1 :(得分:0)

我遇到了同样的问题。在我的角色中我分配了几条路线。有人可能需要它。应该注意的是,我将@mtyurt答案作为参考。 我解决它的方式如下:

List<Role> roles = roleRepository.findAll();
for (Role role : roles
        ) {
    List<Page> pages = pageRepository.findPagesPerRole(role.getId());
    List<String> pageslist = new ArrayList<>();
    for (Page page : pages
         ) {
        pageslist.add(page.getUrl());
    }
    String[] authorities = pageslist.toArray(new String[0]);
    http.authorizeRequests().antMatchers(authorities).hasAuthority(role.getAuthority().toString());
}

我有table我保留路线,另一个我保留roles。在角色中我可以为您分配页面,而页面可以有多个角色,因此会生成many-to-many表。从SQL我得到了分配给角色的路由列表。这就是我做两个循环的原因。然后最后到http我分配一个strings数组和角色的名称。