我有一个使用Spring MVC的java webapp。 webapp在jboss AS7.1服务器上运行,该服务器使用带有表单身份验证的JAAS登录模块。当用户在表单上填写用户名和密码时,登录会顺利进行。
我现在想要创建一个java控制器,用于记录用户"好像用户填写了loginform。
public void logInProgrammatically(String username, string password)
{
//???
}
当上述方法完成后,应允许任何对任何安全页面的访问,因为用户被视为已登录。
可以通过访问Jboss的loginModule实现并设置一些属性来编程吗?
答案 0 :(得分:1)
您可以使用JAAS标准类以编程方式实现身份验证。假设我们正在使用我们的自定义LoginModule实现(或任何标准实现)com.sample.CustomLoginModule
。此登录模块在jboss配置XML中配置。
步骤1:在JBoss中定义安全域。对于其他服务器,可以在JAAS config中配置相同的信息。
<security-domain name="customlogin" cache-type="default">
<authentication>
<login-module code="com.sample.CustomLoginModule" flag="required">
</login-module>
</authentication>
</security-domain>
步骤2:使用自定义登录模块以编程方式登录用户。
public void logInProgrammatically(String username, string password){
CallbackHandler handler = //use proper implementation to capture username and password arguments.
LoginContext ctx = new LoginContext("customlogin", handler);
ctx.login();
}
使用此解决方案,您不受特定应用程序服务器API的约束。此代码可通过JAAS配置更改在任何应用程序服务器上移植。
要使用JAAS进行编程身份验证,请参阅Oracle的教程: http://docs.oracle.com/javase/7/docs/technotes/guides/security/jaas/tutorials/GeneralAcnOnly.html
答案 1 :(得分:1)
我相信你想要的是:Authenticating Users Programmatically。它是Servlet API 3.0的一部分,而不是jboss登录模块。
答案 2 :(得分:0)
WebAuthentication提供了几乎开箱即用的功能。我们的想法是,您可以创建自己的servlet或自定义类,例如可以使用指定的user
和password
直接调用的here。
IE中。在您的logInProgrammatically
中,您可以使用与LoginHandler
提交的内容类似的内容here:
public void logInProgrammatically(String username, string password)
{
// ...
WebAuthentication webA = new WebAuthentication();
webA.login(username, password);
// ...
}