如果用户未在JSF中登录,则重定向到登录页面
我正在开发一个JSF应用程序。 这仅适用于授权用户 所以,每当有人试图通过URL访问任何页面时,它都应该重定向到登录 我使用XHTML作为前端。并使用JSF框架 我将登录Bean存储在会话范围中 不幸的是,我使用了servlet和静态页面“response.sendRedirect()” 提前谢谢 我认为一种解决方案是将所有页面放在WEB-INF中,但一个问题是我正在使用resonse.sendRedirect() 我也在使用Facelet模板 请推荐我如果用户未在JSF中登录,则重定向到登录页面,jsf,redirect,login,Jsf,Redirect,Login,我正在开发一个JSF应用程序。 这仅适用于授权用户 所以,每当有人试图通过URL访问任何页面时,它都应该重定向到登录 我使用XHTML作为前端。并使用JSF框架 我将登录Bean存储在会话范围中 不幸的是,我使用了servlet和静态页面“response.sendRedirect()” 提前谢谢 我认为一种解决方案是将所有页面放在WEB-INF中,但一个问题是我正在使用resonse.sendRedirect() 我也在使用Facelet模板 请推荐我 文件夹中的我的登录页 “/Common
文件夹中的我的登录页
“/Common/Login.xhtml”
和中的一些页面
"/Admin/*.xhtml"
还有几页
`"Employee/*.ahtml"`
如何为管理员和员工这两个文件夹设置筛选器
我像这样给出了请求,但请求并没有削弱到过滤器Servlet中
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/faces/Admin/*</url-pattern>
<url-pattern>/faces/Employee/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>`
逻辑过滤器
/faces/Admin/*
/面孔/员工/*
要求
向前地
`
如果我这样给予
<url-pattern>/*</url-pattern>
/*
它将进入无限循环请给出这个问题的解决方案我决定处理这个问题的方法是使用JSF2与Spring和Spring Security 3集成。一个很好的教程和示例项目可以在这里找到如何适当地做到这一点 如果您不希望将Spring集成到您的项目中,那么我认为最好的方法是实现一个servlet过滤器,它将在HTTP请求到达FacesServlet之前授权或拒绝HTTP请求
<filter>
<filter-name>securityFilter</filter-name>
<filter-class>org.company.filters.SecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>securityFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
安全过滤器
org.company.filters.SecurityFilter
安全过滤器
/*
要求
向前地
任何存在的SessionScoped bean都可以作为HttpSession的属性找到,因此您将能够以这种方式从SessionScoped托管bean检索登录用户
此时授权应该很简单。如果登录用户不应查看此页面,则将用户重定向到未经授权的页面。我解决了此问题。
我的过滤器映射
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
如果(path.contains(“/Admin/”)| | path.contains(“/Employee/”),可以替换整个
){
通过使用/Admin/*/Employee/*
而不是/*
来阻止。在这个问题上,我和你走的是同一条路。我发现SpringSource的Mike Weisner的这个网络研讨会是一个信息丰富的手表,告诉我该怎么做:-@7SpecialGems整洁的演示文稿…谢谢分享!
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
System.out.println("Entered intop Login Filter");
HttpServletRequest req = (HttpServletRequest) request;
LoginBean login = (LoginBean) req.getSession().getAttribute("login");
String path = req.getRequestURI().substring(req.getContextPath().length());
System.out.println("path:" + path);
if (path.contains("/Admin/") || path.contains("/Employee/")) {
if (login != null) {
if (login.getUsername() != null && !login.getUsername().equals("")) {
chain.doFilter(request, response);
} else {
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect("/EMS2/faces/Html/Common/Login.xhtml");
}
} else {
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect("/EMS2/faces/Html/Common/Login.xhtml");
}
} else {
chain.doFilter(request, response);
}
}