从零开始搭建自己的网站六:拦截器添加

因为管理台是需要账号密码才能登录的,所以本文就是配置相应的拦截器,防止用户直接通过url直接进入管理台页面。

1、首先对上篇文章中的用户登录验证方法进行修改。"redirect:/manager/index" 意思是重定向到 /manager/index。

    /**
     * 用户登录验证
     */
    @RequestMapping("/loginUser")
    public String loginUser(HttpServletRequest request, String username, String password) {
        if (StringUtils.isNotBlank(username) && StringUtils.isNotBlank(password)) {
            boolean login = userService.login(username, password);
            if (login) {
                request.getSession().setAttribute("user", username);
                return "redirect:/manager/index";
            }
        }
        return "manager/login";
    }

2、在Application中加入拦截器配置:登录拦截器和全局拦截器。登录拦截器只对/manager/下的url地址拦截。全局拦截器拦截全局的页面。

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/manager/*");
        registry.addInterceptor(new MainInterceptor()).addPathPatterns("/*");
        super.addInterceptors(registry);
    }

3、编写拦截器。登录拦截器验证的是否session中存在user,不存在就跳转到登录页面。全局拦截器是检查url是否存在,不存在就重定向到404页面。

public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String user = (String) request.getSession().getAttribute("user");
        if (StringUtils.isNotBlank(user)) {
            return true;
        } else {
            response.sendRedirect("/login/index");
            return false;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
public class MainInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        int status = response.getStatus();
        if (status == 404) {
            response.sendRedirect("/404");
            return false;
        } else {
            return true;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

4、配置完之后,先不登录,直接浏览器进入 http://localhost:8088/manager/index,页面就会跳转到登录页面。拦截器配置完成

评论 抢沙发

表情