当前位置: 代码迷 >> 综合 >> Spring+MyBatis开发 Day06
  详细解决方案

Spring+MyBatis开发 Day06

热度:80   发布时间:2024-02-01 10:51:18.0
过滤器的用法

我们的网站需要账户才能登陆,但如果我们直接在url中输入请求,能不能访问到资源呢?不采取任何过滤措施的话,任何人都能进入我们的管理页面是一件很恐怖的事情。
首先打开web.xml,添加下列配置

<filter><filter-name>loginfilter</filter-name><filter-class>com.zhongruan.filter.LoginFilter</filter-class>
</filter>
<!-- 过滤器的映射 -->
<filter-mapping><filter-name>loginfilter</filter-name><url-pattern>*.do</url-pattern>
</filter-mapping>

这时我们就配置好了一个过滤器,它会拦截所有.do的请求(你也可以自定义成别的),发送给filter-class中的处理函数
再看一下我们的过滤器

@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("过滤器执行====");// 1. 得到HttpServletRequestHttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;// 2. 得到sessionHttpSession session = request.getSession();// 3. 得到User对象User user = (User) session.getAttribute("user");// 4. 得到请求路径String url = request.getRequestURI();// 5. 判断session是否存在user对象 如果存在 表示已登录 不存在 则未登录 indexOf// indexOf 方法的作用 如果包含子字符串 则返回 子字符串的索引 如果不包含 则返回 -1if (user == null && url.indexOf("login.do") == -1) {System.out.println("登录信息不存在, 并且访问登录接口以外的其他接口,应进行拦截");response.sendRedirect(request.getContextPath() + "/pages/login.jsp");} else {// 过滤器的放行System.out.println("登录信息已存在");filterChain.doFilter(servletRequest, servletResponse);}}

他是通过session中的user是否存在来判断的,当user不存在时只能访问到login界面,再看一下login函数

@RequestMapping("/login.do")public String login(String username, String password, HttpSession session) {System.out.println(username + "====" + password);// 对 用户名和密码 进行 校验User user = userService.login(new User(username, password));System.out.println(user);if (user == null) {System.out.println("登录失败");return "pages/failer";} else {// 将user对象 存储到 session中session.setAttribute("user", user);// 7.26 查询用户角色List<Integer> list = roleService.findRoleId(user.getId());session.setAttribute("roleIds", list);System.out.println("登录成功");return "pages/success";}}

如果成功登录,就将user添加到session中,这样我们就实现了一个简单的登录过滤器

  相关解决方案