You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat DataSourceRealm添加用户启用禁用字段,是否需自定义子类?

针对DataSourceRealm添加用户启用/禁用字段的解决方案
  • 不一定非要通过子类化实现,这里提供两种可行方案:
  1. 子类化自定义Realm(直接扩展DataSourceRealm)
    这是最直接的实现方式,创建MuchBetterDataSourceRealm继承自DataSourceRealm,重写用户查询的方法,在SQL中加入enabled = true的过滤条件:

    public class MuchBetterDataSourceRealm extends DataSourceRealm {
        @Override
        protected String getUserSQL() {
            return "SELECT username, password FROM users WHERE username = ? AND enabled = true";
        }
    
        @Override
        protected String getRoleSQL() {
            // 角色查询可按需修改,保持默认逻辑则直接返回父类方法结果
            return super.getRoleSQL();
        }
    }
    

    编写完成后,将编译后的类放入Tomcat的lib目录(或项目依赖目录),然后在server.xml中配置使用这个自定义Realm即可。

  2. 改用JdbcRealm配置自定义SQL
    如果你不需要DataSourceRealm的特定功能,可以直接使用JdbcRealm,它支持通过配置参数直接指定带enabled过滤的查询SQL,无需编写代码:

    <Realm className="org.apache.catalina.realm.JdbcRealm"
           dataSourceName="jdbc/YourDataSource"
           userTable="users" userNameCol="username" userCredCol="password"
           userRoleTable="user_roles" roleNameCol="role"
           userSearchSQL="SELECT username, password FROM users WHERE username = ? AND enabled = true"
           roleSearchSQL="SELECT role FROM user_roles WHERE username = ?"/>
    

内容的提问来源于stack exchange,提问作者Whome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:48:29