You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在数据库中缺少有关角色的信息的Spring JWT。

数据库中缺少有关角色的信息是指在用户登录验证过程中,没有正确从数据库中获取到用户角色的信息。下面是一个使用Spring JWT实现角色授权的解决方法,包括代码示例:

  1. 确保数据库中存在角色信息表(例如role表),并且用户表(例如user表)中的角色外键与角色表相关联。

  2. 在用户表中添加角色外键,并确保角色外键与角色表中的主键关联。

-- 创建角色表
CREATE TABLE role (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255)
);

-- 创建用户表
CREATE TABLE user (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(255),
  password VARCHAR(255),
  role_id INT,
  FOREIGN KEY (role_id) REFERENCES role(id)
);
  1. 在Spring Boot的配置文件中,配置数据库连接信息。
spring.datasource.url=jdbc:mysql://localhost:3306/db_name
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  1. 创建角色实体类(Role)和用户实体类(User),并添加JPA注解。
@Entity
@Table(name = "role")
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    // 省略getter和setter
}

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;

    private String password;

    @ManyToOne
    @JoinColumn(name = "role_id")
    private Role role;

    // 省略getter和setter
}
  1. 创建角色仓库接口(RoleRepository)和用户仓库接口(UserRepository),继承JpaRepository。
@Repository
public interface RoleRepository extends JpaRepository<Role, Long> {
    Role findByName(String name);
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username);
}
  1. 创建自定义用户详情服务(CustomUserDetailsService),实现UserDetailsService接口。
@Service
public class CustomUserDetailsService implements UserDetailsService {
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException("User not found");
        }
        return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), getAuthorities(user.getRole()));
    }

    private List<GrantedAuthority> getAuthorities(Role role) {
        return Collections.singletonList(new SimpleGrantedAuthority(role.getName()));
    }
}
  1. 创建安全配置类(SecurityConfig),配置Spring Security
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private CustomUserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/api/public").permitAll()
                .antMatchers("/api/private").hasRole("ADMIN")
                .anyRequest().authenticated()
                .and()
                .addFilter(new JwtAuthenticationFilter(authenticationManager()))
                .addFilter(new JwtAuthorizationFilter(authenticationManager()));
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
  1. 创建JWT生成器和解析器工具类,用于生成和解析JWT。
public class JwtUtils {
    private static final String SECRET = "your_secret_key";
    private static final long EXPIRATION_TIME = 86400000; // 24 hours

    public static String generateToken(Authentication authentication) {
        User user = (User) authentication.getPrincipal();
        Date expiryDate = new Date(System.currentTimeMillis() + EXPIRATION_TIME);

        return Jwts.builder()
                .setSubject(user.getUsername())
                .setExpiration(expiryDate)
                .signWith(SignatureAlgorithm.HS512, SECRET)
                .compact();
    }

    public static String getUsernameFromToken(String token) {
        return Jwts.parser()
                .setSigningKey(SECRET)
                .parseClaimsJws(token)
                .getBody()
                .getSubject();
    }
}
``
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

微服务的学习与实践 主赛道 | 社区征文

数据库和数据模型,通过轻量级的通信协议(如 REST API、事件流和消息代理)进行协作,按照业务能力进行组织,具有清晰的边界和职责。微服务的优势在于提高了系统的可扩展性、可维护性、可测试性、可复用性和敏捷性,同时也带来了一些挑战,如服务的划分、协调、治理、监控、安全和事务等。在微服务的技术栈方面,我主要学习了 Spring Boot、Spring Cloud、Docker、Kubernetes、Nacos、Sentinel、OpenFeign、JWT、ElasticSearch 等技术...

2022技术盘点之平台云原生架构演进之道|社区征文

原始的Spring Cloud全家桶的微服务架构,经过不断发展,也在演进为基础设施下沉的云原生架构,让应用生于云,长于云,充分利用云上能力,降本增效,削减技术债务,专注业务创新。下图为SmartOps架构全景:![](https://k... 在之前CI/CD中缺乏安全全场景检测,代码、镜像、环境中存在安全风险,对此进行安全左移,在进行安全全场景建设中,进行五阶段实施:![](https://kaliarch-bucket-1251990360.cos.ap-beijing.myqcloud.com/blog_img/20...

达梦@记一次国产数据库适配思考过程|社区征文

在项目工程中引入达梦数据库驱动,SpringBoot对MySql做了集成,没有get到对达梦数据库做集成,小编这里采用的jdk1.8,安装的达梦数据库也是DM8,所以这里引入:DmJdbcDriver18,其相对于DmJdbcDriver17作出了很大的改进。... ```![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1e2ab87a2680438fa4b0904c47a97edc~tplv-k3u1fbpfcp-5.jpeg?)说明:这里采取Nacos注册中心去管理项目工程中用到的一些配置信息,Nacos的介绍...

超复杂调用网下的服务治理新思路

用户在北京下单酒店的数据没必要经过深圳。但在抖音、今日头条这些综合信息服务场景中,非全局数据非常少,那些看似本地的数据如用户名、用户的粉丝数、近期的点赞列表,其实也是全局数据。最后一个方面,SET 化需要冗... 如果用户想要在域外访问这个数据库,我们需要通过左下角的 Query、ETL 把它转化成一个离线数据库。整个大框是一个 domain,它不同于 DDD 的 domain,它被称为服务域,可以理解成是一组服务的集合。字节跳动内部也参考了...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

在数据库中缺少有关角色的信息的Spring JWT。-优选内容

微服务的学习与实践 主赛道 | 社区征文
数据库和数据模型,通过轻量级的通信协议(如 REST API、事件流和消息代理)进行协作,按照业务能力进行组织,具有清晰的边界和职责。微服务的优势在于提高了系统的可扩展性、可维护性、可测试性、可复用性和敏捷性,同时也带来了一些挑战,如服务的划分、协调、治理、监控、安全和事务等。在微服务的技术栈方面,我主要学习了 Spring Boot、Spring Cloud、Docker、Kubernetes、Nacos、Sentinel、OpenFeign、JWT、ElasticSearch 等技术...
2022技术盘点之平台云原生架构演进之道|社区征文
原始的Spring Cloud全家桶的微服务架构,经过不断发展,也在演进为基础设施下沉的云原生架构,让应用生于云,长于云,充分利用云上能力,降本增效,削减技术债务,专注业务创新。下图为SmartOps架构全景:![](https://k... 在之前CI/CD中缺乏安全全场景检测,代码、镜像、环境中存在安全风险,对此进行安全左移,在进行安全全场景建设中,进行五阶段实施:![](https://kaliarch-bucket-1251990360.cos.ap-beijing.myqcloud.com/blog_img/20...
达梦@记一次国产数据库适配思考过程|社区征文
在项目工程中引入达梦数据库驱动,SpringBoot对MySql做了集成,没有get到对达梦数据库做集成,小编这里采用的jdk1.8,安装的达梦数据库也是DM8,所以这里引入:DmJdbcDriver18,其相对于DmJdbcDriver17作出了很大的改进。... ```![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1e2ab87a2680438fa4b0904c47a97edc~tplv-k3u1fbpfcp-5.jpeg?)说明:这里采取Nacos注册中心去管理项目工程中用到的一些配置信息,Nacos的介绍...
超复杂调用网下的服务治理新思路
用户在北京下单酒店的数据没必要经过深圳。但在抖音、今日头条这些综合信息服务场景中,非全局数据非常少,那些看似本地的数据如用户名、用户的粉丝数、近期的点赞列表,其实也是全局数据。最后一个方面,SET 化需要冗... 如果用户想要在域外访问这个数据库,我们需要通过左下角的 Query、ETL 把它转化成一个离线数据库。整个大框是一个 domain,它不同于 DDD 的 domain,它被称为服务域,可以理解成是一组服务的集合。字节跳动内部也参考了...

在数据库中缺少有关角色的信息的Spring JWT。-相关内容

六年安卓开发的技术回顾和展望 | 社区征文

在架构设计、编译加速、快速迭代相关都做了比较多的工作,让我大饱眼福。同时直播业务本身也是比较复杂的,在一个页面里会集成 IM、推拉流等功能,同时还有大量的消息驱动 UI 刷新操作,要保证业务快速迭代,同时用... 日常工作就是使用 Spring 等库开发简单的接口,不涉及到上下游通信、数据库优化等。第二个阶段,你做的项目更加复杂了,会涉及到一个技术方向的多个点,这时你需要能**把这些点连起来,给出一个更体系化的解决方案...

云原生安全:保护云端应用的新策略与挑战 | 社区征文

角色和权限。 - 容器安全: - 集装箱安全是维护云原生应用的关键方面,尤其是在运用集装箱技术(如Dockerer)时、在Kubernetes的情形下。 - 运用信得过的基础镜像:从可信源中挑选基础镜像,并不断更新,以获取最... 确保在发生安全事故时展开调查剖析。 - 安全事故监管:应用安全信息和事件管理(SIEM)监管安全事故的工具及时日志分析工具,马上查验隐性攻击和行为障碍。 - 威协信息和漏洞管理:定阅威协信息和漏洞管理服务,马上...

社区容器服务发现及负载均衡

.svc`指向其 VIP。**Etcd**就是 K8S 的数据库,保存了所有资源的信息。*每个 Pod 会被分配一个 IP,并写入 Pod 资源中。每个 Service 对应一个 Endpoint 资源,Endpoint 中维护 Service 后端 Pod 的 IP 列表。*... 在此处理 JWT 鉴权,通过精确路由配置。内层网关是 K8S Ingress,使用阿里云 SLB 将流量转发至 K8S 内部,具体使用的是 Istio Ingress Gateway,Istio gateway 同样是使用 Envoy。![picture.image](https://p6-vol...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

基于Prometheus的企业级监控体系探索与实践|社区征文

缺乏全局管理工具。- 告警能力不足:缺乏oncall机制,告警信息持久化存储等能力。## 通过服务发现简化运维Prometheus提供多种客户端配置方式,包括服务发现,静态文件等。在目前云原生环境下,应用具备高度弹性,通... 全行使用统一的springcloud技术栈,注册中心为Eureka,为了兼容Prometheus服务发现,我们对Eureka进行二次开发使其能够模拟Consul的服务注册发现API(2.21.0版本后以支持Eureka SD),简化server端配置。我们监控主要分...

一次性讲清楚「连接池获取连接慢」的所有原因|得物技术

连接池存在等待连接 2. 应用负载过高 3. 应用 STW 4. 网络阻塞 5. 数据库&数据库中间件异常 四、总结 **一** **前言**应用连接... 如果使用 Spring+JDBC 管理事务的情况下,开启事务的命令是 `SET autocommit=0`,提交事务是 `commit`,这里根据数据库线程 ID 来逐个分析,提交事务的时间-开启事务的时间=事务持续时间。![picture.image](h...

基于火山引擎微服务引擎 MSE 的全链路灰度落地实践

是火山引擎提供的一款面向微服务全生命周期的一站式微服务解决方案。产品提供开源增强的 Nacos 注册发现、配置管理,兼容原生 Spring Cloud 、gRPC 及 Service Mesh 架构丰富微服务治理能力。来源 | 火... 分析在微服务架构体系下存在的问题。 ## **1.1 传统灰度发布过程**传统的灰度发布一般是在生产环境单独隔离部分资源,复用实际生产环境配套的基础设施如中间件、数据库等以实现无限接近于生...

火山引擎DataLeap的Data Catalog系统公有云实践

**数据库和中间件:** 是和业界主流云厂商对齐的存储和中间件领域的标准云服务,和公司内部对应组件也会有若干差异,Data Catalog为此也做了多版本的兼容。Data Catalog在元数据存储上使用到了Hbase/MySQL/ES/Red... 我们将租户信息和Partition Strategy相结合,实现了多租户场景下读写数据的逻辑隔离,保证了数据安全性。## 内外部功能一致Data Catalog在字节跳动内部已打磨多年,产品形态和技术架构比较成熟,但随着公有云部署和...

干货| 火山引擎DataLeap的Data Catalog系统公有云实践

* **数据库和中间件:** 是和业界主流云厂商对齐的存储和中间件领域的标准云服务,和公司内部对应组件也会有若干差异,Data Catalog为此也做了多版本的兼容。Data Catalog在元数据存储上使用到了Hbase/MySQL/ES/Redis... 我们将租户信息和Partition Strategy相结合,实现了多租户场景下读写数据的逻辑隔离,保证了数据安全性。内外部功能一致Data Catalog在字节跳动内部已打磨多年,产品形态和技术架构比较成熟,但随着公有云...

【新增功能】文件处理功能—自动读取csv/excel文件内容

在我们收取或发送的邮件、审批、数据库等内容中,时常有csv/excel文件,需要将csv/exce文件数据导入到其他系统中进行数据的录入和使用。 **手动将数据读取并导入不仅浪费了大量人工时间,还时常出现数据同步不及时的... =&rk3s=8031ce6d&x-expires=1716135612&x-signature=DG4HRqGMONoPzgL%2FfzJWTMzavnk%3D) --- **Q****关于集简云**ABOUT JIJYUN...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询