0

检查条件后,如果条件失败,然后使用请求调度程序将其重定向到其他页面。它正在重定向到该页面,但 css 未应用于该页面。为什么会这样?

public class RolePrivilegeFilter implements Filter {
List<String> privilege = null;
private static final String notAuthorizedPath = "/home/notAuthorized.jsf";
@Override
public void destroy() {
log.info("filter finish");
}

@Override
public void doFilter(ServletRequest sRequest, ServletResponse sResponse, FilterChain filterChain) throws IOException, ServletException {
String smUser = null;
 try {
    HttpServletRequest request = (HttpServletRequest) sRequest;
    HttpServletResponse response = (HttpServletResponse) sResponse;
    HttpSession session = null;
    try {
        request = (HttpServletRequest) sRequest;
        smUser =  request.getHeader(EnvironmentBean.SESSION_ATTR_SM_USER);
        } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
        }
    if (rolePrivilege == null || rolePrivilege.isEmpty()) {
    rolePrivilege = new RolePrivilegeBuilderImpl().rolePrivilege("Smtest2");
    privilege filter bean is\t"+rolePrivilege);
    log.debug("After rolePrivilege: " + rolePrivilege);
    if (rolePrivilege != null && rolePrivilege.size() > 0 ) {
    if (session == null) {
        session = request.getSession(true);
    }
    session.setAttribute("privilege", rolePrivilege);

    } else {
             //This is the page iam  redirecting to. 
    System.out.println("role privilege not authorized page");
    RequestDispatcher rd = request.getRequestDispatcher(notAuthorizedPath);
                    rd.forward(request, response);
                    return;
           }
    } catch (Exception e) {
        e.printStackTrace();
        log.debug("Error in setting session attribute: " + e.getMessage());
    }
    log.debug("doFilter() finish");
    filterChain.doFilter(sRequest, sResponse);
}

@Override
public void init(FilterConfig arg0) throws ServletException {
    log.info("filter start");

}
}

问题是 iam 重定向到该页面,但该页面的 css 没有被应用,就像没有显示背景图像一样。为什么会这样?

4

1 回答 1

1

显然过滤器的 URL 模式匹配浏览器对该 CSS 文件的请求,因此它也被过滤器阻止了。显然,您已将过滤器映射到一个过于宽泛的 URL 模式,例如 as/*或其他东西。

您需要确保过滤器绕过所有这些 CSS 文件请求。如果无法相应更改过滤器的 URL 模式以绕过 CSS 文件请求,例如更改/*/app/*/app在所有受限资源所在的文件夹中的请求上运行,那么您需要重写过滤器的代码以添加额外的检查在请求 URI 上。

像这样的东西:

if (request.getRequestURI().endsWith(".css")) {
    chain.doFilter(request, response);
    return;
}

这将使所有*.css请求都被传递而不是被阻止。

于 2012-09-11T11:40:51.707 回答