我的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 -->
答案 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,它应该仍然有用。