2015-05-06 27 views
0

我有下面的代码重置它使用IBM门户的PUMA API密码在IBM Portlet应用程序重置密码: 下面的代码检查用户是否进入老年passoword正确与否:如何使用PUMA API

loginService.checkPassword(userName, oldpswd.toCharArray()); 

下面的代码更新新密码:

ibmPumaUtility.updateUserPassword(userName,resetPasswordForm.getNewPassword()); 


PumaController pController = pumaHome.getController(); 
      PumaLocator locator = pumaHome.getLocator(); 
      String defaultRealm = "xyz"; 
      User user = locator.findUserByIdentifier("uid=" + username + ",cn=users,o=" + defaultRealm); 
      HashMap<String, String> userAttrs = new HashMap<String, String>(); 
      userAttrs.put("password", updatedPassword); 
      pController.setAttributes(user, userAttrs); 

的问题是,当用户再次使用旧密码登录,他是能够登录,但只有一段时间5-10分钟,之后他能够登陆与新的密码。

有人可以请建议我如何解决这个问题。

+0

该问题应该由WebSphere安全组件引起。它缓存了安全主题一段时间。我以为我有这种行为的PMR,但不记得是否。您可以检查用户注销时是否可以使WebSphere Subject缓存中的条目无效。 –

+0

@StefanSchmitt我是Webshpere Portal应用程序的新手。您能否建议什么是以及如何验证WebSphere Subject缓存? – user3592257

+0

检查Sascha的答案应该有所帮助 –

回答

2

您用于验证“旧密码”是否仍然可用的API调用: loginService.checkPassword(userName,oldpswd.toCharArray());

实际上在默认情况下在WAS级别上使用性能优化验证。这与大多数使用情况相匹配。 “真正的登录”不会让你进入 - 真正检查当前的密码。 因此,如果您打开第二个浏览器并尝试使用“旧密码”登录门户,则无法获得有效的会话。 (某些LDAP服务器有例外,因为它们仍允许使用旧密码登录约60分钟)。

但是,如果您需要API立即返回正确的值,则会有一个配置选项。 通过以下方式将“基本登录”切换为“完整登录”: •单击WP AuthenticationService。在其他属性下选择自定义属性。

•单击新建创建新的自定义属性。

•在名称字段中,键入authentication.basic.login.target

•在值字段中,键入Portal_LTPA

•点击OK确认更改。

•保存配置。

•重新启动服务器。

此更改后,验证将利用完整的Portal_LTPA登录堆栈,并在使用“旧密码”时返回错误。