- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我开始使用 Apache Shiro。我从简单的示例开始,然后逐渐增加复杂性。
目前我正在使用 JSF 从登录表单中收集电子邮件地址和密码,并使用 UsernamePasswordToken 通过 Shiro 对用户进行身份验证。
UsernamePasswordToken token = new UsernamePasswordToken(email, password);
SecurityUtils.getSubject().login(token);
它由开箱即用的 JDBC 领域支持,带有一个简单的查询
jdbcRealm.authenticationQuery = SELECT password FROM user WHERE email = ?
为了获得有关用户的更多详细信息,例如他们的姓名,我通过委托(delegate)人在数据库中查找用户 - 这是他们的电子邮件地址。
currentUser = userDAO.findByEmail((String) SecurityUtils.getSubject().getPrincipal());
这很好用,但是允许用户更改他们的电子邮件地址,这会中断查找。我的目标是将唯一的用户 ID 存储为主体而不是电子邮件地址,因为这永远不会改变。我将如何实现这一目标?
最佳答案
我最终用一种简单的方法解决了这个问题——在创建身份验证 token 之前将电子邮件地址转换为用户 ID,并使用用户 ID 作为 token 中的主体。
try{
// Lookup the user by email
User user = userDAO.findByEmail(email);
// If no match we can't authenticate
if(user == null){
throw new AuthenticationException();
}
// Else, build a token with the user id and password
UsernamePasswordToken token = new UsernamePasswordToken(user.getUserId().toString(), password);
// Attempt to login
SecurityUtils.getSubject().login(token);
}catch(AuthenticationException ex){
return false;
}
我的 UserDAO bean 配置为处理 javax.persistence.NoResultException 并返回 null。
在我的 shiro.ini 文件中,我将 jdbcRealm.authenticationQuery
更改为以下内容(注意我使用的是 MySQL)
jdbcRealm.authenticationQuery = SELECT password FROM user WHERE user_id = CAST(? AS UNSIGNED)
最后,要查找有关我现在通过用户 ID 查找的用户的详细信息,它现在是主体。
currentUser = userDAO.findByUserId(Integer.parseInt((String) SecurityUtils.getSubject().getPrincipal()));
关于java - Apache 四郎 : authenticate with username/password but store user id as the principal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21966703/
这是我第一次使用 php 学习 session ,我正在尽可能地制作最简单的登录页面。 因此,只要用户永远不会关闭网页,理论上这是否可以让任何给定的字符串 $username 始终存储在 $_SESS
我已在Windows 10中更改了用户名,现在我需要自动将更改后的用户名作为Powershell脚本获取 但是我尝试的所有操作都返回了我的旧用户名,除了一些与AD相关的查询。 例子: $env
我的 html 页面上有这个链接,可以在特定用户上打开 Instagram 应用程序: Link to Instagram Profile 我一直在寻找自动运行 url 'instagram://us
此代码似乎不适用于 Windows 7/8? Public Function UserName() UserName = Environ$("UserName") End Function 有
Excel宏:如何编写此“如果用户名[示例代码:Environ(“用户名”)]等于此范围内的值之一[示例:我从工作簿创建的范围:范围(“Authorized_Users”)]然后。 ..“谢谢! 最佳
PowerShell的$env:username有什么区别和 [environment]::username和 为什么他们可能会返回不同的用户 ? (我知道还有其他方法可以获取当前用户) 一些背景:
与大多数网站的工作方式相同,我将“UsErNaMe”存储在数据库中,但让用户使用“用户名”登录。 这是一个相当明显且必要的功能,很多人似乎都问过它,但我不断遇到的解决方案似乎与 Devise 自己的文
在终端中输入 psql 后,用户通常会以 username=# 的形式出现在控制台中。但后来我注意到它说username-#,其中等号被连字符替换,但它似乎仍然以相同的方式执行。 我知道这是一个简单的
在终端中输入 psql 后,用户通常会以 username=# 的形式出现在控制台中。但后来我注意到它说username-#,其中等号被连字符替换,但它似乎仍然以相同的方式执行。 我知道这是一个简单的
这个问题已经有答案了: Reference - What does this error mean in PHP? (38 个回答) 已关闭 5 年前。 我是 PHP 的初学者,我一整天都在尝试修复这
我正在尝试从表 users 中取出 url 并将其插入到表 images 的 url> 来自当前登录的用户。此代码无法在 images 表中插入 url。 $uploaduser = $_SESSIO
我很难让 WebDriver 在 PayPal 网站的用户名框中键入内容。我已经尝试过 xpath、id、css,但这里一定有我遗漏的东西,因为它应该很简单。文本框是代码最底部的 input = "e
我正在使用 iOs 社交框架从某个用户那里检索 facebook 提要。为此,在进行身份验证后,我将执行以下操作: NSURL *requestURL = [NSURL URLWithString:@
我有一个 WCF web 服务托管在 IIS 中。这是相同的配置: 当我尝试在我的 WinForms 客户端中使用此特定服务(作为服务引用添加时)时,它会抛出此异常: The username is
def login_page(request): form = LoginForm(request.POST or None) context = { "form":
更新我想我很快就假设了 voodoo jquery 之谜。我注意到我确实使用了两次“用户名”ID,这就是问题所在。第二个用户名 id 是通过从 php 注入(inject)页面的 html 代码添加到
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
到目前为止,下面显示的第一个 $sql = “INSERT INTO MySQLtable 语句将插入一个包含静态文本的新行 VALUES ('statictext', 'statictext') 。
我几乎完成了我的大型项目的开发,但是如果我能做到而不是让用户配置文件页面位于:http://example.com/profile/username/USERNAME<,我会很高兴 (我目前正在使用
(注意我是 Scala 的新手,仍然在为集合操作的最常见操作而苦苦挣扎。) 我想将 List[Task] 转换为 Map。以下是一些详细信息: // assignee may be null case
我是一名优秀的程序员,十分优秀!