添加拦截器问题(比如就是没有登录的话是无法访问某个页面的)

一.ssm框架中使用拦截器的实例1

新建一个过滤器LoginInterceptor ,根据解决思路
哪些页面需要登录?哪些页面不需要呢?
a. 不需要登录也可以访问的
如:注册,登录,产品,首页,分类,查询等等
b. 需要登录才能够访问的
如:购买行为,加入购物车行为,查看购物车,查看我的订单等等
不需要登录也可以访问的已经确定了,但是需要登录才能够访问,截止目前为止还不能确定,所以这个过滤器就判断如果不是注册,登录,产品这些,就进行登录校验
1. 准备字符串数组 noNeedAuthPage,存放哪些不需要登录也能访问的路径
2. 获取uri
3. 去掉前缀/tmall_ssm
4. 如果访问的地址是/fore开头
4.1 取出fore后面的字符串,比如是forecart,那么就取出cart
4.2 判断cart是否是在noNeedAuthPage
4.2 如果不在,那么就需要进行是否登录验证
4.3 从session中取出"user"对象
4.4 如果对象不存在,就客户端跳转到login.jsp
4.5 否则就正常执行

 

 

public class LoginInterceptor extends HandlerInterceptorAdapter {

    @Autowired

    CategoryService categoryService;

    @Autowired

    OrderItemService orderItemService;

     /**

     * 在业务处理器处理请求之前被调用

     * 如果返回false

     *     从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链

     * 如果返回true

     *    执行下一个拦截器,直到所有的拦截器都执行完毕

     *    再执行被拦截的Controller

     *    然后进入拦截器链,

     *    从最后一个拦截器往回执行所有的postHandle()

     *    接着再从最后一个拦截器往回执行所有的afterCompletion()

     */

    public boolean preHandle(HttpServletRequest request,

                             HttpServletResponse response, Object handler) throws Exception {

 

        HttpSession session = request.getSession();

        String contextPath=session.getServletContext().getContextPath();

        String[] noNeedAuthPage = new String[]{

                "home",

                "checkLogin",

                "register",

                "loginAjax",

                "login",

                "product",

                "category",

                "search"};

 

        String uri = request.getRequestURI();

        uri = StringUtils.remove(uri, contextPath);

//        System.out.println(uri);

        if(uri.startsWith("/fore")){

            String method = StringUtils.substringAfterLast(uri,"/fore" );

            if(!Arrays.asList(noNeedAuthPage).contains(method)){

                User user =(User) session.getAttribute("user");

                if(null==user){

                    response.sendRedirect("loginPage");

                    return false;

                }

            }

        }

 

        return true;

 

    }

 

 

在xml文件中再注册一下:

<mvc:interceptors>

        <mvc:interceptor>

            <mvc:mapping path="/fore*"/>

            <bean class="com.how2java.tmall.interceptor.LoginInterceptor"/>

        </mvc:interceptor>

    </mvc:interceptors>

 

 

 

 

 

二.ssm框架中使用拦截器的实例2

1.

public class LoginInterceptor extends HandlerInterceptorAdapter {
//可以使用alt+insert进行类的重写
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        if (request.getSession().getAttribute("user") == null) {
            response.sendRedirect("/admin");
            return false;
        }
        return true;
    }
}

//我们使用这个类说明我们需要对哪些地方进行拦截

2.

@Configuration//标注这是一个配置类
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/admin/**")//表示/admin/**这个形式的url下的访问都会被进行限制
                .excludePathPatterns("/admin")//表示除了哪些路径不被限制
                .excludePathPatterns("/admin/login");
    }
}

//这个类就是使用了上面的那个类进行一些操作

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值