首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻止CSS和JS

阻止CSS和JS
EN

Stack Overflow用户
提问于 2018-02-05 17:28:25
回答 2查看 220关注 0票数 0

我的AuthenticationFilter阻止了我所有的css和js文件,但只在主页localhost:8080上。

我如何删除它?我需要能够加载的js和css的主页。

AuthenticationFilter

代码语言:javascript
复制
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

代码语言:javascript
复制
   <!--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 -->
EN

回答 2

Stack Overflow用户

发布于 2018-02-05 17:44:27

这使得它可以工作。我不知道这是不是合适的方式...

代码语言:javascript
复制
   //don't block css and js
    else if(request.getRequestURI().contains("js") || request.getRequestURI().contains("css")) {
        filterChain.doFilter(request, response);
    }
票数 0
EN

Stack Overflow用户

发布于 2018-02-05 19:04:31

在你发布了你的解决方案后,当我再次查看你的代码时,画面似乎很清晰。

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

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

所以,你设了个陷阱,抓到了你的动物,然后放了它。

这可以用一种更好的方式来完成,只要不捕捉那些你不想捕捉的动物。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48619324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档