我有以下web.xml文件我将欢迎页面保存到安全检查中,这样它就会重定向到登录页面,但显示的欢迎页面没有用户登录。这是正确的方法吗?
<welcome-file-list>
<welcome-file>/GISPages/welcome.xhtml</welcome-file>
</welcome-file-list>
<resource-ref>
<res-ref-name>jdbc/Gis_WebApp</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Pages</web-resource-name>
<url-pattern>/GISPages/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>registereduser</role-name>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Live</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/noauth.xhtml</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>registereduser</role-name>
</security-role>
<security-role>
<role-name>admin</role-name>
</security-role>
答案 0 :(得分:1)
安全约束保护URL模式,但在这种情况下,由于欢迎文件设置,您的默认URL将更改为http://:port / webcontext /,并且将显示welcome.xhtml。根据定义的URL模式,受保护的URL应具有类似http://:port / webcontext / GISPages / welcome.xhtml的URL 由于URL模式与应用程序服务器不匹配,因此呈现页面内容。
只有对我有用的解决方案是在prerender事件中检查UserPrincipal
<f:event type="preRenderComponent"
listener="#{bean.forwardToLoginIfNotLoggedIn}" />
如果UserPrincipal返回null,则并重定向到login.xhtml。
打开旧帖子的道歉。我最近遇到了类似的问题,因此认为这可能对某些人有用。