阻止CSS和JS

时间:2018-02-05 09:28:25

标签: javascript java html css

我的AuthenticationFilter阻止了我的所有css和js文件,但仅限于主页localhost:8080

如何删除此内容?我需要能够在主页面上加载js和css。

AuthenticationFilter

public class AuthenticationFilter implements Filter {

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    HttpSession session = request.getSession(false);
    String loginURI = request.getContextPath() + "/";

    boolean loggedIn = session != null && session.getAttribute("loggedUser") != null;
    boolean loginRequest = request.getRequestURI().equals(loginURI);

    if(request.getRequestURI().equals("/")) {
        filterChain.doFilter(request, response);
    }
    if (loggedIn || loginRequest) {
        filterChain.doFilter(request, response);
    } else {
        response.sendRedirect(loginURI);
    }
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void destroy() {

}

}

Web.xml中

   <!--Make sure the user is logged to access the other pages-->
<filter>
    <filter-name>AuthorizationFilter</filter-name>
    <filter-class>com.atp.Model.Filter.AuthenticationFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>AuthorizationFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.woff2</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.woff</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.ttf</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.mp4</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping> <!-- The 'static' content -->

2 个答案:

答案 0 :(得分:0)

这使它成功。我不知道这是不是......的方式。

   //don't block css and js
    else if(request.getRequestURI().contains("js") || request.getRequestURI().contains("css")) {
        filterChain.doFilter(request, response);
    }

答案 1 :(得分:0)

当您在发布解决方案后再次查看代码时,图片似乎很清楚。

在您的网页xml中,您指定了.. 包含.css.js.img等作为扩展名的所有请求URI必须映射到servlet,并且在每个servlet上应用过滤器。因此,所有静态资源调用也都通过filter传递,您实际上并不需要它。

然后在你的解决方案中,你正在捕获这些请求(你发布的else-if条件作为答案)然后什么都不做,只是将它传递给它的下一步即请求客户端(浏览器)。

所以,你创造了一个陷阱,你抓住了你的动物,你释放了他。

这可以通过不捕捉那些你不想要的动物来更好地完成。

因此,删除.css,.img等的servlet映射,并删除else-if条件以检查它是css还是js,它应该仍然有用。