SnI*_*IpY 6 security authentication redirect servlets jsf-2
我想知道如果某个c:ifclausule是否可以重定向用户true?
<c:if test="#{loginController.authenticated}">
//redirect to index page
</c:if>
Run Code Online (Sandbox Code Playgroud)
对的,这是可能的.
但是,如果用户已经登录,我建议你为/login.jsp应用过滤器,并在过滤器中转发到另一个页面.
以下是使用过滤器说明如何执行此操作的示例:
public class LoginPageFilter implements Filter
{
public void init(FilterConfig filterConfig) throws ServletException
{
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
if(request.getUserPrincipal() != null){ //If user is already authenticated
response.sendRedirect("/index.jsp");// or, forward using RequestDispatcher
} else{
filterChain.doFilter(servletRequest, servletResponse);
}
}
public void destroy()
{
}
}
Run Code Online (Sandbox Code Playgroud)
在web.xml中添加此过滤器
<filter>
<filter-name>LoginPageFilter</filter-name>
<filter-class>
com.sample.LoginPageFilter
</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>This parameter is for testing.</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoginPageFilter</filter-name>
<url-pattern>/login.jsp</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
除了这种Filter方法,你也可以使用<f:event type="preRenderView">.把它放在视图的顶部:
<f:event type="preRenderView" listener="#{loginController.checkAuthentication}" />
Run Code Online (Sandbox Code Playgroud)
并将此侦听器方法添加到LoginController:
public void checkAuthentication() throws IOException {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
if (externalContext.getUserPrincipal() != null) {
externalContext.redirect(externalContext.getRequestContextPath() + "/index.xhtml");
}
}
Run Code Online (Sandbox Code Playgroud)
就这样.
| 归档时间: |
|
| 查看次数: |
4112 次 |
| 最近记录: |