带有 jdbc 和哈希密码的 shiro

2024-01-07

这是我的 shiro 配置

[main]
authc.loginUrl = /site/index.jsp
authc.usernameParam = user
authc.passwordParam = pass
authc.rememberMeParam = remember
authc.successUrl = /site/home.jsp


jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled=true
jdbcRealm.authenticationQuery = select password from users where username = ?
jdbcRealm.userRolesQuery = select role from users where username = ?

credentialsMatcher = org.apache.shiro.authc.credential.HashedCredentialsMatcher
credentialsMatcher.hashAlgorithmName = SHA-256
credentialsMatcher.storedCredentialsHexEncoded = true
credentialsMatcher.hashIterations = 5000
jdbcRealm.credentialsMatcher = $credentialsMatcher



jof = org.apache.shiro.jndi.JndiObjectFactory
jof.resourceName = jdbc/postgres
jof.requiredType = javax.sql.DataSource
jof.resourceRef = true
jdbcRealm.dataSource = $jof
securityManager.realms = jdbcRealm

[urls]
/theme/** = anon
/site/** = authc
/site/cards.jsp = roles[smoto,admin]
/site/jobs.jsp = roles[admin]

我为管理员密码 admin 创建了这样的哈希值

String hashedPassword = new Sha256Hash("admin", "",5000).toHex();

我将哈希值插入到数据库中,但我的身份验证每次都失败,有人对 shiro 的这种设置有任何经验吗?另外,我如何启用 Shiro 的调试或日志记录?

编辑: 这是这种身份验证的正确设置,在另一个 stackoverflow 帖子中找到它

[main]
authc.loginUrl = /site/index.jsp
authc.usernameParam = user
authc.passwordParam = pass
authc.rememberMeParam = remember
authc.successUrl = /site/home.jsp

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled=false
jdbcRealm.authenticationQuery = select password from users where username = ?
jdbcRealm.userRolesQuery = select role from users where username = ?

ps = org.apache.shiro.authc.credential.DefaultPasswordService
pm = org.apache.shiro.authc.credential.PasswordMatcher
pm.passwordService = $ps

jof = org.apache.shiro.jndi.JndiObjectFactory
jof.resourceName = jdbc/postgres
jof.requiredType = javax.sql.DataSource
jof.resourceRef = true

jdbcRealm.dataSource = $jof
jdbcRealm.credentialsMatcher = $pm

#securityManager.realms = jdbcRealm

[urls]
/theme/** = anon
/site/** = authc
/site/cards.jsp = roles[smoto,admin]
/site/jobs.jsp = roles[admin]

诀窍是使用 shiro 提供的哈希工具并将准确的输出复制到数据库字段“密码”中,整个字符串将包含有关使用什么算法、多少次迭代等信息,例如:

$shiro1$SHA-256$500000$salthere$hashhere

是的,HashedCredentialsMatcher 虽然足够,但有点旧。你可能会发现 Shiro 的更新版本密码匹配器 http://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/authc/credential/PasswordMatcher.html更容易使用。您可以配置其内部密码服务 http://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/authc/credential/PasswordService.html很容易:

[main]
passwordService = org.apache.shiro.authc.credential.DefaultPasswordService
#configure the passwordService to use the settings you desire
#...
passwordMatcher = org.apache.shiro.authc.credential.PasswordMatcher
passwordMatcher.passwordService = $passwordService
#...
# Finally, set the matcher on a realm that requires password matching for account authentication:
myRealm = ...
myRealm.credentialsMatcher = $passwordMatcher

您可以使用一个实例PasswordService在您的应用程序中创建帐户或更新帐户密码时创建密码哈希:

String submittedPlaintextPassword = ...
String encryptedValue = passwordService.encryptPassword(submittedPlaintextPassword);
...
userAccount.setPassword(encryptedValue);
userAccount.save(); //create or update to your data store

只需确保在中配置了passwordServiceshiro.ini具有相同的配置passwordService在您的应用程序代码中使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 jdbc 和哈希密码的 shiro 的相关文章

  • 连接外部 Accumulo 实例和 java

    我正在尝试使用 Accumulo 连接到虚拟机 问题是 我无法将其连接到 Java 中 我可以看到 Apache 抛出的网页 但我无法让它与代码一起工作 我认为这是缺乏知识的问题而不是真正的问题 但我找不到这方面的文档 所有示例都使用 lo
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 我们可以有条件地声明 spring bean 吗?

    有没有一种方法可以有条件地声明 Spring bean 例如
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 为什么用scala写的代码比用java写的慢6倍?

    我不确定我在编写 scala 代码时是否犯了一些错误 问题是 The four adjacent digits in the 1000 digit number that have the greatest product are 9 9
  • Java中Gson、JsonElement、String比较

    好吧 我想知道这可能非常简单和愚蠢 但在与这种情况作斗争一段时间后 我不知道发生了什么 我正在使用 Gson 来处理一些 JSON 元素 在我的代码中的某个位置 我将 JsonObject 的 JsonElements 之一作为字符串获取
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • 如何使用双重调度来分析图形基元的交集?

    我正在分析图形基元 矩形 直线 圆形等 的交互并计算重叠 相对方向 合并等 这被引用为双重调度的一个主要示例 例如维基百科 http en wikipedia org wiki Double dispatch 自适应碰撞算法通常要求 不同的
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 即使禁用安全性,OAuth 令牌 API 也无法在 Elastic Search 中工作

    我是 Elastic search 新手 使用 Elastic search 版本 7 7 1 我想通过以下方式生成 OAuth 令牌弹性搜索文档 https www elastic co guide en elasticsearch re
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • 检测到 JVM 正在关闭

    我有一个使用 addShutdownHook 处理 Ctrl C 的 Swing 应用程序 它工作正常 直到我的关闭任务之一调用一个在正常情况下更改 JLabel 文本的函数 此时它挂起 我认为问题是 Swing EDT 已终止或正在等待某
  • 使用 DBCP 配置 Tomcat

    在闲置一段时间 几个小时 后 我们收到了 CommunicationsException 来自 DBCP 错误消息 在异常中 位于这个问题的末尾 但我没有看到任何配置文件中定义的 wait timeout 我们应该看哪里 在 tomcat
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • 尝试重新加载 module.pm 已中止。编译失败

    我有一个正在执行的 Perl 脚本mod perl并作为HTTP server myServer pl uses a module pm 当我与一位用户一起使用时 一切看起来都很好 但是当我将它置于数百个用户的压力下时 它给了我这个奇怪的错
  • QWidget 报告错误的宽度值

    我想查询小部件的宽度以执行一些自定义布局管理 不幸的是 无论小部件实际有多大或多小 以下代码都会返回 640 int myWidth this gt rect size width this is my class derived from
  • 为什么 video.requestPictureInPicture() 只能运行一次?

    我正在尝试通过 Javascript onscroll 函数进入和退出视频的 PIP 模式 并且我只能进入和退出此模式一次 这是我的代码笔 if myVideo paused myVideo currentTime gt 0 myVideo
  • PHP 从数字字符串中删除逗号

    在 PHP 中 我有一个全是字符串的变量数组 一些存储的值是带有逗号的数字字符串 我需要的 一种从字符串中修剪逗号的方法 并且仅对数字字符串执行此操作 这并不像看起来那么简单 主要原因是以下几点失败 a 1 435 if is numeri
  • Git Gui 不会忽略提交消息中以井号 (#) 开头的行

    当我使用git commit 以井号 开头的行将被忽略 但当我使用 Git Gui 提交时 它们不会被忽略 如同使用井号 开始 git 提交消息 https stackoverflow com questions 2788092 start
  • 使用模板的 Docusign 嵌入式签名

    我需要步骤 程序让收件人使用模板通过 NodeJS 应用程序进行签名 目前我正在使用 docusign 节点 sdk 我想通过 API 将签名嵌入到应用程序中 嵌入式签名 而不是在另一个窗口中打开 DocuSign 我建议你看一下DocuS
  • Android Vimeo 视频在 webview 中第二次播放时崩溃

    我在webview中播放vimeo视频 源代码你可以看一下 Android Vimeo 视频无法在 webview 中播放 https stackoverflow com questions 25130801 android vimeo v
  • MadExcept 在尝试最后时触发

    我正在使用 MadExcept 来调试我的应用程序 这是一个优秀的框架 但当 try finally 块发生异常时 它仍然显示那个丑陋的框 并且用户认为应用程序已经崩溃 我怎样才能删除它 有办法吗 听起来好像它正在按设计工作 try fin
  • 如何正确分发带有数据文件的 pip 包?

    我有一个要分发的包 mymodule data 1 txt mymodule init py tests test mymodule py setup py 为了将其安装在 virtualenv 下 我应用以下命令 pip install
  • 在 GoDaddy Linux 托管中部署 Web 应用程序

    我正在尝试将 laravel 应用程序部署到 godaddy linux 托管 我在引用我购买的域使用的 laravel 文件夹中的 public index 时遇到问题 我看过教程将文件移动到托管根目录 公共 的公共文件夹中 我希望尽可能
  • 是否可以设置默认的 PDO 获取模式?

    在检索数据之前 我总是必须输入 STH gt setFetchMode PDO FETCH OBJ 为了使我的代码更具可读性 如果我可以在某处设置默认模式 那就太好了 Thanks Edit 我最初希望可以将 PDO FETCH OBJ 添
  • Node.js 在同一项目中进行 React 和 Rest 路由

    我对 NodeJS 还很陌生 并且制作了一些充当休息服务的应用程序 并且我从 HTML 页面调用休息服务 我还制作了一些反应应用程序 问题 我可以将这两种类型的应用程序放在同一个应用程序中 以便我的 React 应用程序可以使用本地剩余 U
  • 对于推送通知,websocket 是必需的吗?

    我在服务器端有 PHP 在客户端有 HTML 和 javascript 我正在制作一个应用程序 利益相关者可以在其中输入一条消息 该消息会实时广播到一个组的多个接收者 我在 google 上做了一些研究 我知道我需要使用 WebSocket
  • 是否可以使用 GWT-Maven-Plugin 从命令行设置 user.agent 属性?

    我知道在我的 gwt xml 文件中 我可以通过添加以下内容来指定我希望 GWT 编译器编译我的应用程序的浏览器
  • 手动从一种 UIColor 褪色到另一种 UIColor

    我正在尝试淡化一个UIColor到另一个drawRect 我创建了这个函数来计算一定百分比的颜色 UIColor colorFromColor UIColor fromColor toColor UIColor toColor percen
  • WTSOpenServer 返回“访问被拒绝”

    我正在尝试在我拥有管理员权限的远程计算机上使用远程桌面 API 但是WTSOpenServer调用始终返回错误 5 访问被拒绝 我什至尝试打电话WNetAddConnection2建立一个会话 工作正常 我可以连接到机器上的 IPC 或 C
  • Google 助理“没有名为 googles 的模块......”

    每当我运行这个命令时 py m googlesamples assistant auth helpers client secrets
  • NHibernate 与 Microsoft Sync Framework 集成良好吗?

    我们想要同时使用 NHibernate 和 Microsoft Sync Framework 有人有结合这两个框架的经验吗 Thanks Ashley 不 混合 NHibernate 和 Sync Framework 会出现一些问题 See
  • 我无法打开 .xlsx 文件

    我想打开一个 xlsx 文件 我尝试了下面的代码 但它既没有打开也没有抛出任何错误 任何人都可以阐明它吗 string path C examples file1 xlsx string connString string Format P
  • 带有 jdbc 和哈希密码的 shiro

    这是我的 shiro 配置 main authc loginUrl site index jsp authc usernameParam user authc passwordParam pass authc rememberMeParam