Spring Security单项目权限设计步骤详解是怎样的?

更新于
2026-09-22 12:15:36
21阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计777个文字,预计阅读时间需要4分钟。

Spring Security单项目权限设计步骤详解是怎样的?

为什么选择Spring Security?在JavaWeb的世界里,Spring可以说是一统江湖,随着微服务的到来,Spring Cloud也成为了Java程序员必备的框架。那么,既然阿里面都是用Spring Cloud写开源的,为什么还要选择Spring Security呢?

为什么选择SpringSecurity?

现如今,在JavaWeb的世界里Spring可以说是一统江湖,随着微服务的到来,SpringCloud可以说是Java程序员必须熟悉的框架,就连阿里都为SpringCloud写开源呢。(比如大名鼎鼎的Nacos)作为Spring的亲儿子,SpringSecurity很好的适应了了微服务的生态。你可以非常简便的结合Oauth做认证中心服务。本文先从最简单的单体项目开始,逐步掌握Security。更多可达官方文档

准备

我准备了一个简单的demo,具体代码会放到文末。提前声明,本demo没有用JWT,因为我想把token的维护放到服务端,更好的维护过期时间。(当然,如果将来微服务认证中心的形式,JWT也可以做到方便的维护过期时间,不做过多讨论)如果想了解Security+JWT简易入门,请戳

本项目结构如下

另外,本demo使用了MybatisPlus、lombok。

核心代码

首先需要实现两个类,一个是UserDetails的实现类SecurityUser,一个是UserDetailsService的实现类SecurityUserService。

** * Security 要求需要实现的User类 * */ @Data public class SecurityUser implements UserDetails { @Autowired private SysRoleService sysRoleService; //用户登录名(注意此处的username和SysUser的loginName是一个值) private String username; //登录密码 private String password; //用户id private SysUser sysUser; //该用户的所有权限 private List<SysMenu> sysMenuList; /**构造函数*/ public SecurityUser(SysUser sysUser){ this.username = sysUser.getLoginName(); this.password = sysUser.getPassword(); this.sysUser = sysUser; } public SecurityUser(SysUser sysUser,List<SysMenu> sysMenuList){ this.username = sysUser.getLoginName(); this.password = sysUser.getPassword(); this.sysMenuList = sysMenuList; this.sysUser = sysUser; } /**需要实现的方法*/ @Override public Collection<? extends GrantedAuthority> getAuthorities() { List<GrantedAuthority> authorities = new ArrayList<>(); for(SysMenu menu : sysMenuList) { authorities.add(new SimpleGrantedAuthority(menu.getPerms())); } return authorities; } @Override public String getPassword() { return this.password; } @Override public String getUsername() { return this.username; } //默认账户未过期 @Override public boolean isAccountNonExpired() { return true; } //默认账户没有带锁 @Override public boolean isAccountNonLocked() { return true; } //默认凭证没有过期 @Override public boolean isCredentialsNonExpired() { return true; } //默认账户可用 @Override public boolean isEnabled() { return true; } }

这个类包含着某个请求者的信息,在Security中叫做主体。其中这个方法是必须实现的,可以获取用户的具体权限。我们这边权限的颗粒度达到了菜单级别,而不是很多开源项目中角色那级别,我觉得颗粒度越细越方便(个人觉得...)

Spring Security单项目权限设计步骤详解是怎样的?

/** * Security 要求需要实现的UserService类 * */ @Service public class SecurityUserService implements UserDetailsService{ @Autowired private SysUserService sysUserService; @Autowired private SysMenuService sysMenuService; @Autowired private HttpServletRequest github.com/majian1994/easy-file-back

结束语

本文简单讲解了,主要是将Security相关的东西,具体实现角色的三要素,用户、角色、权限(菜单)可以看我的代码,都写完测完了,本来想写个文档管理系统,帮助我司更好的管理接口文档,but有位小伙伴找了一个不错的开源的了,所以这代码就成了我的一个小demo。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

本文共计777个文字,预计阅读时间需要4分钟。

Spring Security单项目权限设计步骤详解是怎样的?

为什么选择Spring Security?在JavaWeb的世界里,Spring可以说是一统江湖,随着微服务的到来,Spring Cloud也成为了Java程序员必备的框架。那么,既然阿里面都是用Spring Cloud写开源的,为什么还要选择Spring Security呢?

为什么选择SpringSecurity?

现如今,在JavaWeb的世界里Spring可以说是一统江湖,随着微服务的到来,SpringCloud可以说是Java程序员必须熟悉的框架,就连阿里都为SpringCloud写开源呢。(比如大名鼎鼎的Nacos)作为Spring的亲儿子,SpringSecurity很好的适应了了微服务的生态。你可以非常简便的结合Oauth做认证中心服务。本文先从最简单的单体项目开始,逐步掌握Security。更多可达官方文档

准备

我准备了一个简单的demo,具体代码会放到文末。提前声明,本demo没有用JWT,因为我想把token的维护放到服务端,更好的维护过期时间。(当然,如果将来微服务认证中心的形式,JWT也可以做到方便的维护过期时间,不做过多讨论)如果想了解Security+JWT简易入门,请戳

本项目结构如下

另外,本demo使用了MybatisPlus、lombok。

核心代码

首先需要实现两个类,一个是UserDetails的实现类SecurityUser,一个是UserDetailsService的实现类SecurityUserService。

** * Security 要求需要实现的User类 * */ @Data public class SecurityUser implements UserDetails { @Autowired private SysRoleService sysRoleService; //用户登录名(注意此处的username和SysUser的loginName是一个值) private String username; //登录密码 private String password; //用户id private SysUser sysUser; //该用户的所有权限 private List<SysMenu> sysMenuList; /**构造函数*/ public SecurityUser(SysUser sysUser){ this.username = sysUser.getLoginName(); this.password = sysUser.getPassword(); this.sysUser = sysUser; } public SecurityUser(SysUser sysUser,List<SysMenu> sysMenuList){ this.username = sysUser.getLoginName(); this.password = sysUser.getPassword(); this.sysMenuList = sysMenuList; this.sysUser = sysUser; } /**需要实现的方法*/ @Override public Collection<? extends GrantedAuthority> getAuthorities() { List<GrantedAuthority> authorities = new ArrayList<>(); for(SysMenu menu : sysMenuList) { authorities.add(new SimpleGrantedAuthority(menu.getPerms())); } return authorities; } @Override public String getPassword() { return this.password; } @Override public String getUsername() { return this.username; } //默认账户未过期 @Override public boolean isAccountNonExpired() { return true; } //默认账户没有带锁 @Override public boolean isAccountNonLocked() { return true; } //默认凭证没有过期 @Override public boolean isCredentialsNonExpired() { return true; } //默认账户可用 @Override public boolean isEnabled() { return true; } }

这个类包含着某个请求者的信息,在Security中叫做主体。其中这个方法是必须实现的,可以获取用户的具体权限。我们这边权限的颗粒度达到了菜单级别,而不是很多开源项目中角色那级别,我觉得颗粒度越细越方便(个人觉得...)

Spring Security单项目权限设计步骤详解是怎样的?

/** * Security 要求需要实现的UserService类 * */ @Service public class SecurityUserService implements UserDetailsService{ @Autowired private SysUserService sysUserService; @Autowired private SysMenuService sysMenuService; @Autowired private HttpServletRequest github.com/majian1994/easy-file-back

结束语

本文简单讲解了,主要是将Security相关的东西,具体实现角色的三要素,用户、角色、权限(菜单)可以看我的代码,都写完测完了,本来想写个文档管理系统,帮助我司更好的管理接口文档,but有位小伙伴找了一个不错的开源的了,所以这代码就成了我的一个小demo。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。