设置用户过滤器
package com.imooc.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import com.imooc.domain.User;
@WebFilter(value={"/admin/*"})
public class UserFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 获得session进行判断
HttpServletRequest req = (HttpServletRequest) request;
User existUser = (User) req.getSession().getAttribute("existUser");
if(existUser == null){
// 没有登录:
request.setAttribute("msg", "您还没有登录,没有权限访问!");
request.getRequestDispatcher("/login.jsp").forward(req, response);
return;
}
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
但是请求转发后
没有样式
如果点击 登录和 注册的话
样式又不会出现问题
正在回答
同学你好,是的。没有被拦截,是因为转发是服务器端请求jsp,不是客户端请求jsp,所以不会拦截。设置过滤器拦截所有请求是其中一种拦截方式,这样可以更好的控制用户访问权限。在开发的时候,要根据项目和业务需求配置过滤器,决定是否要拦截所有请求。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,如果jsp文件放在WEB-INF下,则需要通过Servlet转发到jsp页面,不会有漏洞。如果不是,同学可以在UserFilter过滤器中设置要对哪些jsp页面和Servlet放行。
参考代码如下:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String str = ((HttpServletRequest) request).getRequestURI().toString(); if (str.indexOf(".css") > 0 || str.indexOf(".jpg") > 0 || str.indexOf(".png") > 0 || str.indexOf("login") > 0||str.indexOf("KaptchaServlet")>0||str.indexOf("LoginServlet")>0) { chain.doFilter(request, response); return; } User user = (User) ((HttpServletRequest) request).getSession().getAttribute("existUser"); if (user == null || "".equals(user)) { // 未登录 request.setAttribute("msg", "用户未登陆"); ((HttpServletResponse) response) .sendRedirect(((HttpServletRequest) request).getContextPath() + "/login.jsp"); return; } else { chain.doFilter(request, response); return; } }
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星