仅限JSP/Servlet访问特定用户

use*_*114 4 jsp servlets security-constraint

我正在开发一个网络应用程序.我希望能够让一些朋友看到它,但不会有其他人偶然发现这个网址.我要打开一个登陆页面,然后是一个简单的密码框.输入正确的密码后,我只需将其记录在会话中,并像往常一样公开网站,以便其他时间保持浏览器打开状态.

有没有标准的方法来做到这一点?我将为我的webapp添加额外的代码以支持这一点,我不确定是否已经有一种内置的方法(我正在使用java servlet).

谢谢

Bal*_*usC 5

您可以使用部署描述符使用容器管理的身份验证.这样就不需要额外的代码来支持带有输入和密码字段的简单登录表单,该字段提交给URL j_security_check.这是一个基本的例子:

<form action="j_security_check" method="post">
    <input type="text" name="j_username">
    <input type="password" name="j_password">
    <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

假设您在名为的文件夹中有私有页面/private并且上面的登录页面位于/private/login.jsp,则将以下条目添加到webapp web.xml:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Private</web-resource-name>
        <url-pattern>/private/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>friends</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Private</realm-name>
    <form-login-config>
        <form-login-page>/private/login.jsp</form-login-page>
        <form-error-page>/private/error.jsp</form-error-page>
    </form-login-config>
</login-config>
Run Code Online (Sandbox Code Playgroud)

然后,在您正在使用的servletcontainer中,您需要配置一个所谓的Realm for Private.由于不清楚您使用的是哪个servlet容器,因此这是一个Tomcat 8.0目标文档:Realm Configuration HOW-TO.您可以将其配置为针对XML文件或数据库甚至自定义位置验证用户名/密码组合.


一个完全不同的替代方案是在帮助下创建一个登录机制,该机制Filter检查会话范围中登录用户的存在.看到这个这个答案如何实现这一目标.