使用JSP和Websphere进行安全登录

时间:2012-03-15 07:05:27

标签: security jsp networking login websphere

我正在使用JSP设计安全登录。我打算使用表单授权来访问Websphere上的应用程序。基本思想是,当域中经过身份验证的内部用户访问页面时,它将按照正常情况进行。但是,如果外部用户尝试访问它,它会将它们引导到登录页面,与Active Directory的接口,并在正确的身份验证时将它们重定向到页面。

为了使其工作,我尝试修改Web.xml以允许使用内置的“j_security_check”servlet进行表单身份验证。登录后,它将迎接用户“你好,!”使用简单的函数<%request.getRemoteUser()%> <%request.getUserPrincipal()。getName()%>

基于examples found here,我修改了我的Web.xml详细信息,如下所示:

<welcome-file-list>
    <welcome-file>/protected/index.jsp</welcome-file>
</welcome-file-list>

<security-constraint>
    <web-resource-collection>
        <url-pattern>/protected/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
        <role-name>users</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
</login-config>

<security-role>
    <description>Administrator</description>
    <role-name>admin</role-name>
</security-role>
<security-role>
    <description>Users</description>
    <role-name>users</role-name>
</security-role>

在我的login.jsp下,我有一个用于登录的简单表单。

<form action="j_security_check" method="post">
    Username: <input type="text" name="j_username">
    Password: <input type="password" name="j_password">
    <input type="submit" value="Login">
</form>

在我的index.jsp下,它通过简单的请求向用户致意。

<body>
    Hello, <% request.getRemoteUser(); %>
    Hello, <% request.getUserPrincipal().getName(); %>
</body>

我在这里遇到三个问题。重要性按原样排名。

1)错误403 重定向和登录页面有效。当我尝试访问index.jsp时,我被重定向到login.jsp。当我输入一个不正确的uid:pwd对时,我会遇到error.jsp。当我正确登录时,我被重定向回index.jsp但是我遇到了一个错误403:网站要求您登录。我确信我已登录,因为我之前无法访问内置的 snoop 页面,但登录后,我可以。我怀疑它是我的Web.xml中的一些设置

2)获取用户的ID 即使在Web.xml中禁用所有保护并访问index.jsp,我也会遇到“ Hello,null!”而不是“ Hello,user!” 。 index.jsp中显示的代码应该是正确的,因为我从互联网上找到的snoop示例代码中复制出来。 request.getRemoteUser()对我的index.jsp不起作用,但在snoop页面上有效。在执行请求之前必须有一些我没有打电话的东西?

3)安全(不重要) 我认为这个j_security_check属于Spring Security。我试图加密发送和接收方以及传输信道。这是因为对于身份验证,我认为密码不得以明文形式发送或存储。我发现some information here导致我尝试/尝试保护这个身份验证过程。

对于我所面临的前三个问题,我将不胜感激。感觉就像我接近完成这件事但是它如此接近,但到目前为止......

1 个答案:

答案 0 :(得分:2)

如果有人想知道,问题很容易通过配置解决。

1)在Web.xml中分配管理员和用户的角色,必须进入Websphere&gt; .war&gt;角色和用户&gt;并将管理员和用户角色物理分配给Active Directory中指定的角色。这将使用户能够访问该页面。

2)同样使用SPNEGO配置下的Websphere配置,必须附加到列表&#34; |&#34;启用它以便请求。此后,域中经过身份验证的用户将立即访问该项目,而外部用户将被重定向到登录页面。 request.getPrincipalUser()现在可以正常工作。

3)有一个可用的Spring Security示例。唯一的问题是它在ApplicationContextSecurity.xml而不是Active Directory中访问本地Authentication-Provider。为保护频道,在<transport-guarantee>NONE</transport-guarantee>下,NONE应替换为机密。