当前位置: 首页 > 面试题库 >

j_security_check重定向

李昌勋
2023-03-14
问题内容

我正在Tomcat环境中学习Java
servlet。我正在学习如何使用j_security_check使用基于表单的登录身份验证。因此,在我的servlet中,我有一个具有j_username和j_password的登录页面。在该servlet的web.xml文件中,我有一个欢迎页面列表,指示我的登录页面“
landing.html”。因此,理想情况下,成功登录后,我希望用户重定向到“ landing.html”页面。

如果没有身份验证(没有基于表单的身份验证),则我的servlet将打开,并按预期方式转到“ landing.html”页面(“ localhost:8080
/ MyServlet”-显示landing.html的内容)。

但是,现在,由于某种原因,使用j_security_check成功登录后,我被自动重定向到“
landing.html”文件的.css文件。我不明白为什么会这样。

有没有一种特定的方法可以告诉服务器在成功通过身份验证后仅加载“ landing.html”页面,而不将其转发到其他任何地方?

编辑

好的,我解决了。成功认证后正在加载的css文件<head></head>在j_username和j_password所在的login.html页面的标签中列出。我添加了css文件,以使登录页面的设计与网站的其余部分保持一致。我的猜测是,当服务器重新加载所需的资源时,由于某种原因,它只是从head标签重新加载顶部的CSS文件。真奇怪。那么,j_security_check是对Tomcat上的网站进行任何身份验证的最佳方法,还是有更好,更可靠的方法?


问题答案:

基于表单的身份验证的行为如下:

  • 浏览器将请求发送到受保护的URL
  • 服务器截获其请求,发现您未通过身份验证,然后重定向到loginf表单页面
  • 用户登录
  • 服务器将重定向到触发身份验证的URL:第一步中要求的受保护的URL。

这很好,因为它允许用户为受保护的页面添加书签,第二天返回此加标签的页面,登录并直接转到加标签的页面,而不是欢迎页面。

我的猜测是目标网页 不受 保护,但CSS文件受到保护。因此,触发身份验证的请求就是尝试加载CSS文件的请求,这将导致用户重定向到CSS文件。



 类似资料:
  • 问题内容: 我目前在glassfish v2.1中使用基于身份的身份验证来登录用户,并且工作正常。我想切换到该网站,并希望能够获得最初请求的URL(即在重定向到登录页面之前),并在我的程序化登录代码中使用它,以便在身份验证后将用户重定向回请求的页面。 我已经看过源代码-在我的情况下,它是(catalina代码库),它将初始请求保存在会话中的对象中,但是该会话不是,因此没有直接方法可以访问它。 还是

  • 我想知道301和307重定向之间的区别。 我希望通过自制url重定向器生成反向链接,我希望任何“链接果汁”或“页面排名果汁”都能直接从原始主页流向最终url,但如果其中一个原始主页出现问题,我希望能够通过删除该特定页面的重定向链接来关闭该链接。有道理? 我的理解是,301是永久性的,这意味着谷歌将看到301并更新其缓存的URL作为最终目的地,而不管我以后是否取消重定向。 如果我使用307,它将不会

  • Django 原生自带一个可选的重定向应用。它将简单的重定向保存到数据库中并处理重定向。它默认使用HTTP 响应状态码301 Moved Permanently。 安装 请依照下面的步骤安装重定向应用: 确保django.contrib.sites 框架已经安装。 添加'django.contrib.redirects' 到 INSTALLED_APPS 设置中。 添加'django.contri

  • 重定向 可以使用redirect助手函数进行重定向 <?php namespace app\index\controller; class Index { public function hello() { return redirect('http://www.thinkphp.cn'); } } redirect函数和控制器的redirect方法的参数

  • 问题内容: 我有一个网页。该网页将用户重定向到另一个网页,或多或少通过以下方式: 好吧,您知道,我要做的是将GET参数转换为POST参数。不要告诉我这很不好,我知道我自己,这也不是我真正要做的,重要的是我从数组中收集数据并尝试通过POST将其提交到另一个页面。但是,如果用户关闭了JavaScript,它将无法正常工作。我需要知道的是:有没有一种方法可以通过PHP传递POST参数,以便重定向也可以通

  • 问题内容: 我的应用程序有许多System.out.println()语句。 我想从println捕获消息并将其发送到标准记录器(Log4j,JUL等)。 怎么做 ? 问题答案: System类具有,可以用于将输出流更改为例如具有支持的新File流,在这种情况下,可能是另一个使用你选择的日志记录子系统的流。 请记住,如果你将日志记录库配置为输出到标准输出或错误(可能是无限递归类型),则很可能会遇到