当前位置: 首页 > 知识库问答 >
问题:

Spring Security@安全注释和用户权限

金坚
2023-03-14

这是关于SpringV.4(MVC+安全性)的。我实现了UserDetailsServiceImpl,其中在LoadUserByUserName方法中向用户授予其权限。让我们简单地说:

public UserDetails loadUserByUsername(String username) {
    ...     
    Collection<GrantedAuthority> authorities = new ArrayList<>();
    
    authorities.add(new SimpleGrantedAuthority("ADMIN"));
    
    return new org.springframework.security.core.userdetails.User(username, password, enabled, true, true, true, authorities);
    ...
}

还有一个安全控制器,其中有一个带有@securite注释的带注释的方法:

@Secured("ADMIN")
@RequestMapping(value = "/users", method = RequestMethod.GET)
public String users(Model model ...) { ... }

正如您在LoadUserByUserName方法中看到的,我显式地将Admin角色授予了用户。但是,当我尝试访问/users时,我得到一个访问被拒绝异常:

2016-04-19 10:25:16,899 DEBUG(http-nio-8080-exec-9)[org.springframework.security.web.Access.exceptiontranslationfilter]-访问被拒绝(用户不是匿名的);委托到AccessDeniedHandler org.SpringFramework.Security.Access.Vote.AbstractAccessDecisionManager.CheckAllowifallabstainDecisions(AbstractAccessDecisionManager.java:70)在org.SpringFramework.Security.Access.Vote.AffirmativeBased.Decise(AffirmativeBased.java:88)在org.SpringFramework.Security.Access.Interceptor.BeforeInvocation(

(没有@securite注释,一切都正常运行)。

我错过了什么?

共有1个答案

齐典
2023-03-14

令人惊讶的是,问题出在角色名称上。由于defaultroleprefix设置为role_(请参见org.springframework.security.access.vote.rolevoter类),所以所有角色的名称都应该以role_前缀开头。换句话说,当我改变了

Authorities.add(new SimpleGrantedAuthority(“admin”));

Authorities.add(新建SimpleGrantedAuthority(“role_admin”));

@secreted(“admin”)@secreted(“role_admin”)--一切都变得很好。

 类似资料:
  • 问题内容: 我们有一个具有两种类型用户的应用程序。根据用户的登录方式,我们希望他们可以访问应用程序的不同部分。 我们如何实现安全模型以防止用户看到他们无权访问的内容? 我们是否将安全性纳入每个路线的实施中?问题在于我们在请求之间会有一些重复的逻辑。我们可以将其移到辅助函数中,但是仍然需要记住调用它。 我们是否将安全性作为全局app.all()路由处理程序的一部分?问题是我们必须检查每条路线,并根据

  • 我正在学习springsecurity(基于java的配置),我无法使注销正常工作。当我点击注销时,我看到URL更改为http://localhost:8080/logout并获取“HTTP 404-/logout”。登录功能工作正常(即使使用自定义登录表单),但问题是注销,我怀疑重定向的url“localhost:8080/logout”应该类似于“localhost:8808/springte

  • 本文向大家介绍Springboot+SpringSecurity+JWT实现用户登录和权限认证示例,包括了Springboot+SpringSecurity+JWT实现用户登录和权限认证示例的使用技巧和注意事项,需要的朋友参考一下 如今,互联网项目对于安全的要求越来越严格,这就是对后端开发提出了更多的要求,目前比较成熟的几种大家比较熟悉的模式,像RBAC 基于角色权限的验证,shiro框架专门用于

  • 在创建服务器实例之前,你需要在该实例上添加安全组规则,这样服务器实例的用户才能ping这个主机或者通过SSH连接这个实例。安全组是IP过滤的规则组,它决定了网络的连通性,适用于一个Project内的所有实例。配置安全组有两种方式:要么是在默认的安全组中添加规则,要么新建一个安全组,然后把规则写在新的安全组里。 密钥对是SSH的证书,在实例启动时被注入进系统里。如欲使用密钥对注入,镜像中的系统上必须

  • 本文向大家介绍如何使用SpringSecurity保护程序安全,包括了如何使用SpringSecurity保护程序安全的使用技巧和注意事项,需要的朋友参考一下 首先,引入依赖: 引入此依赖之后,你的web程序将拥有以下功能: 所有请求路径都需要认证 不需要特定的角色和权限 没有登录页面,使用HTTP基本身份认证 只有一个用户,名称为user 配置SpringSecurity springsecur

  • 我正在试图理解一些Spring Security代码。我也是Spring Security的新手,我想我在这里遗漏了一些基本的东西。 谢谢,雷。