spring-boot 弹簧安全 angularjs

Posted

技术标签:

【中文标题】spring-boot 弹簧安全 angularjs【英文标题】:spring-boot spring security angularjs 【发布时间】:2018-04-28 11:34:42 【问题描述】:

我是春天世界的新手。我需要创建一个带有一些 CRUD 操作的 spring boot - angularjs 应用程序。

客户端需要 LDAP 和本地 JDBC 身份验证机制。

他们需要一种对两组用户都通用的授权机制。

应根据用户的角色限制用户访问某些页面。并且需要对每个用户应用单独的权限(创建、更新、删除)集

角色应该由管理员用户创建。

那么我该如何实现由管理员决定谁(哪个角色)可以访问哪个页面的页面授权?

@Override
    protected void configure(HttpSecurity http) throws Exception 
        http.authorizeRequests().antMatchers("/", "/home").permitAll().antMatchers("/admin").hasRole("ADMIN")
                .anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout()
                .permitAll();
        http.exceptionHandling().accessDeniedPage("/403");
    

我应该在配置中指定每个角色页面组合吗? 有没有办法动态更改页面和角色,因为角色可能会在以后添加。

【问题讨论】:

【参考方案1】:

可以使用spring mvc和Secured注解

@Controller
public class MainController extends BaseController  

    @Secured("ROLE_ADMIN")
    @RequestMapping("/")
    String home(Model model) 
        return "home";
    

主页将是 /resources/templates/home.ftl 或您喜欢的 jsp。如果用户不是管理员,那么它将重定向到错误页面。

如果您愿意,您可以手动检查权限并将重定向发送到另一个页面。

P.S : 你需要添加 @EnableGlobalMethodSecurity(securedEnabled = true) 到 Spring boot 配置类,以便 Secured 注释工作。

@EnableAutoConfiguration
@ComponentScan
@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
public class Application 

   public static void main(String[] args) throws Exception 
       SpringApplication.run(Application.class, args);
   

【讨论】:

如果在一段时间后创建了一个新角色(可能是本地管理员)怎么办..?而且我认为注解参数不能动态改变。 您可以将页面角色记录存储在数据库中,并手动检查控制器方法用户权限,如果不符合条件则重定向 我改变了主意,现在决定从前端控制对页面的访问和读/写权限,并且只从 spring 端进行基本身份验证。这是一个内部生产应用程序。如何将权限数据集带到 angularjs 端...?我应该使用过滤器吗?在我的情况下使用弹簧安全是一个好主意..?有没有其他方法可以完成这项工作..?

以上是关于spring-boot 弹簧安全 angularjs的主要内容,如果未能解决你的问题,请参考以下文章

为啥弹簧测试失败,不起作用@MockBean

哪个弹簧视图解析器与 angularjs 配合得很好?

弹簧启动执行器示例不工作

Spring boot - Apache 反向代理背后的 Spring 安全性

使用spring-boot对rest服务进行访问控制

Angularjs + Spring-boot + nginx的CORS问题