在Spring Boot+Spring Security框架里配置UserDetailsService

在面临新需求——权限分类和管理时,作为嵌入式工程师的作者因人手不足接手了Java项目。在保持原有代码结构不变的情况下,他选择使用UserDetailsService对Spring Boot+Spring Security的权限管理进行改造。原有的spring-security.xml中通过jdbc直接读取数据库,但为避免暴露数据库结构,作者采用UserDetailsService进行用户数据管理,并方便权限操作。文章详细介绍了如何自定义UserDetailsService和UserDetails,以及在配置动态数据源时遇到的问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司工作需要使用自建的云平台,虽然我是嵌入式工程师但是因为人手不足(主要还是建站的人走了,没人会Java)所以交由我来维护。

这次有了新需求,需要进行权限的分类和管理,由于原先的代码已经经了好几手了(心累啊!!),我需要保持原先的结构不动的情况下加入这些功能,那么原先的方式已经不满足需求了。

查阅了资料以后,决定直接使用UserDetailsService的形式对原先页面进行改造。

我们原先的spring-security.xml有如下代码:

<authentication-manager erase-credentials="false">
        <authentication-provider>
            <jdbc-user-service 
                data-source-ref="dataSource"
                users-by-username-query="select username,password,1 as enabled from sys_user where username=?"
                authorities-by-username-query="select u.username, r.name as role from sys_user u,sys_role_user ur, sys_role r where u.id=ur.Sys_User_id and r.id = ur.Sys_Role_id and u.username= ? "
             />  
       </authentication-provider>
 </authentication-manager>

这里的authentication-provider是使用了直接使用jdbc对数据库进行读取,但是在商业项目中我们不能将数据库结构直接暴露,所以我们要采用UserDetailsService的形式对于用户数据进行管理,同时也方便后期对于权限等地方的操作。

我们这里使用自定义的UserDetailsService来代替原先对数据库的直接操作:

<authentication-manager erase-credentials="false">
    <authentication-provider user-service-ref="myUserDetailsService">
    </authentication-provider>
</authentication-manager>

然后我们在后端,对myUserDetailsService这个类需要进行具体的设计,但是在此之前,我们需要自定义好UserDetails。

package com.hzmsc.scada.entity;

import java.util.Collection;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

public class User implements UserDetails{
   
/**   
 * @title: User
 * @author: zza
 * @date: 2020/3/9 17:05
 * @description: User用于权限验证和获取个人信息等方面,要注意和Users类的区别
*/
    private int id;
    private String username;
    private String password;
    private boolean enabled;
    private Collection<? extends GrantedAuthority> authorities;

    public
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值