我的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 -->发布于 2018-02-05 17:44:27
这使得它可以工作。我不知道这是不是合适的方式...
//don't block css and js
else if(request.getRequestURI().contains("js") || request.getRequestURI().contains("css")) {
filterChain.doFilter(request, response);
}发布于 2018-02-05 19:04:31
在你发布了你的解决方案后,当我再次查看你的代码时,画面似乎很清晰。
在web xml中,您指定了..所有包含.css、.js、.img等作为扩展名的请求URI都必须映射到servlet,并在每个servlet上应用一个过滤器。所以你所有的静态资源调用都是通过filter传递的,而你实际上并不需要它。
然后在你的解决方案中,你捕获这些请求(你发布的else-if条件作为答案),然后什么也不做,只是把它传递给下一步,即请求的客户端(浏览器)。
所以,你设了个陷阱,抓到了你的动物,然后放了它。
这可以用一种更好的方式来完成,只要不捕捉那些你不想捕捉的动物。
因此,删除.css、.img等的servlet映射,并删除else-if条件以检查它是css还是js,它应该仍然可以工作。
https://stackoverflow.com/questions/48619324
复制相似问题