使用基于表单的JAAS,MySQL,Apache TomEE,JSP,Servlets
我知道如何配置基于表单的JAAS,以便在用户尝试访问安全页面时自动将用户重定向到登录页面。基本上,我已经为TomEE和MySQL配置了JDBC Realm(在server.xml
文件中),web.xml
我已经声明了<security-constraint>s
,<security-role>s
和<login-config>
。
然后,有以下登录表单:
<form id="loginForm" action="j_security_check" method="post">
<h3>Login:</h3>
<p>
<label for="name">Username</label> <input name="j_username"
id="username" type="text" required/>
<!-- required -->
</p>
<p>
<label for="password">Password</label> <input name="j_password"
id="password" type="text" required/>
<!-- required -->
</p>
<p>
<input type="submit" value="Submit" />
</p>
</form>
并且,这适用于在web.xml中在<security-constraint>
标记内声明的页面。
但是,我希望能够显式访问用户可以登录的页面。那么,我应该如何实现此登录系统呢?我想使用这个登录页面,我使用的是基于声明形式的JAAS。
我正在考虑将web.xml中的一些jsp或servlet声明为安全的。然后,在网站的某个地方,会有一个链接,其中包含该安全jsp / servlet的URL。因此,当用户点击链接时,他将自动重定向到login
页面(基于声明形式的JAAS中的常见行为)。然后,在成功登录后,用户将被重定向到安全的jsp / servlet。
现在,如何让这个安全的jsp / servlet重定向到,让我们说/home
servlet?问题是在这种情况下不称为HTTP get / post请求,因此实现servlet doGet / doPost方法没有帮助。
答案 0 :(得分:0)
现在,我怎样才能让这个安全的jsp / servlet重定向到,让我们说 / home servlet?问题是在这种情况下不叫HTTP 获取/发布请求,因此实现servlet doGet / doPost方法不会 帮助
不是重定向到/ home,而是重定向到/ homeredir。然后/ homeredir执行302重定向到/ home。 (或者代替302,通过JavaScript location.replace()来实现。)
答案 1 :(得分:0)
在撰写此问题时,我并不清楚基于表单的安全性是如何工作的。我正在考虑“明确地”使用此登录表单:只需转到此页面,输入登录详细信息并按“提交”按钮。但是,据我所知,使用基于表单的安全性时无法做到这一点。
所以,我已经实现了这个:当用户想要登录时,用户点击页面上某处的登录链接,这是指向安全的用户帐户详细信息jsp页面的链接。