Tomcat DataSourceRealm添加用户启用禁用字段,是否需自定义子类?
针对DataSourceRealm添加用户启用/禁用字段的解决方案
- 不一定非要通过子类化实现,这里提供两种可行方案:
子类化自定义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即可。改用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
相关产品推荐
相关产品推荐

