tomcat 8:从servlet中以编程方式登录/验证



用户注册页面。当用户按下SignUp按钮时,servlet会注册该用户,然后必须执行登录并重定向到主页面。

我试过了http://anydoby.com/jblog/en/133但这是行不通的。

尝试

if ( request.getUserPrincipal() == null ) {
  request.getSession(); // create session before logging in
  request.login( username, password );
}

我必须对会话做些什么吗?如何从代码登录/验证,然后重定向到页面?

很难回答这个问题,因为我看到你的解释有些不一致,或者不完整。然而,我会抓住机会去猜测真相并给出答案。

中详细描述了默认登录流程https://stackoverflow.com/a/9530082.当您打开网页时,服务器显示登录表单。当您发送密码时,服务器打开网页。这就是后退按钮工作的原因:您两次询问同一页面,但第一次显示登录表单。登录后单击"返回",然后返回到同一页面(相同的URL)。

您写道:"即使(…)登录页面的url是手动键入的,也会向用户显示主页。"除非您自定义代码,如果用户已经登录,则会显示主页,否则这是不可能的。默认情况下,servlet规范不会阻止已登录的servlet显示登录页面。

因此,如果您有针对display-login-form-for-logged的保护,只需将其应用于针对display-signup-form-for-logged

我验证过的最简单的解决方案是注册表单前面的servlet。如果用户没有被记录,请使用注册表单转到JSP。如果用户被记录,则重定向到主页面。添加resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");是很重要的,否则返回按钮上的servlet将不会被调用,浏览器将显示缓存的表单

如果你仍然感兴趣,请告诉我,我会分享github的例子。但我认为我的解释足以理解并赢得你的问题。(我的例子并不完美,因为普通servlet身份验证很复杂,而且我习惯于Spring安全性)

最新更新