如何模拟/模拟/绕过JEE6容器管理登录?

时间:2012-02-12 18:00:34

标签: java java-ee glassfish

我正在使用JEE6安全注释@RolesAllowed("Admin")和程序化登录:

FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
request.login(loginUser.getUserName(), loginUser.getPassword());

但是,对于测试,我希望能够“模拟”用户登录,并欺骗用户登录的应用程序,而无需实际执行上述代码。 request.login(...)将ping容器以进行登录,我只想告诉容器foo用户已登录并且无需检查密码。我真的不想要一个涉及编写登录模块或更改整个容器设置的解决方案。

谢谢你们!

编辑#1:我使用的是什么appserver?

我正在使用GlassFish 3.1.1。但是,如果可能的话,我想使用任何可用的JEE6 api解决方案“容器无关”。

编辑#2:Balus先生(一位备受好评的专家)不知道绕过实际登录的任何api-neutral方式。我想我可以编写自己的“Yes-Man”登录模块,但我很好奇是否有人知道如何在GlassFish环境中专门绕过限制。

谢谢!

编辑#3:对于后来发现这个问题的人,我转而使用Apache Shiro。我过去曾使用过Spring Security,但对于这个应用程序来说这太过分了。

1 个答案:

答案 0 :(得分:1)

没有API提供的设施。您可以创建一个Filter来检查某个VM参数或环境变量,甚至是一个JNDI变量,然后自动进行登录。

E.g。

String login = System.getProperty("development.login");

if (login != null && request.getRemoteUser() == null) {
    String[] nameAndPassword = login.split(":"); // Assuming "name:password".
    request.login(nameAndPassword[0], nameAndPassword[1]);
}