【发布时间】:2017-10-23 22:36:09
【问题描述】:
我们有一个 JSF 应用程序正在运行。自从默认登陆页面被定义为/pages/dashboard.xhtml。
Shiro 正在捕获请求,显示登录页面,在成功验证后,我们的 servlet 从 shiro 检索存储的请求并将用户转发到该页面。
因此,其他所有类型的深层链接都是可能的。
现在,我们希望允许用户定义他的默认登录页面。系统设置完毕,如果 shiro 没有提供存储的请求,我们的应用程序会将用户转发到他定义的登录页面。
(其他深层链接仍在工作。)
如果用户现在直接拨打https://example.com/app/login.xhtml,他会被转到他的自定义登录页面。 (登录后)
唯一奇怪的是——现在让我发疯了:如果用户只请求https://example.com/app——第一个命中 shiro 的请求又是指向旧仪表板的链接:https://example.com/app/pages/dashboard.xhtml
在 web.xml 中,我们将 servlet 映射到 *.xhtml
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
并将欢迎文件列表定义为
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
文件存在的地方,并且只包含
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Refresh" content="0; URL=login.xhtml">
</head>
</html>
似乎从未调用过该文件。删除重定向时,调用https://example.com/app 立即导致https://example.com/app/login.xhtml - 但shiro 将访问请求记录到https://example.com/app/pages/dashboard.xhtml,然后导致“存储请求”。
(我们不喜欢,因为 szenario 应该使用用户的默认登录页面)
这是wildfly 8.1,我完全不知道触发这个“请求”的地方。 (显然它不是默认页面)——但它是第一个访问我们的 url-rewrite 过滤器的请求,所以它必须在应用程序被调用之前发生......
但是在哪里?
【问题讨论】:
标签: jsf-2