Spring Boot基础学习之(七):拦截器的设置(我让你访问那个,你才能访问那一个)

 本次项目所有能够使用的静态资源可以免费进行下载

静态资源

如果按照之前的内容进行访问时会出现一种问题?

 上面访问则是在没有登录的情况下,直接访问到登录后的界面。这怎么能允许?

通过拦截器进行设置,只有登录成功时才能访问到成功界面。

代码很简单就是在自定义的组件中重写一个方法,并在方法中定义那些是能够访问的路径,那些则是不允许从前端直接访问的页面

自定义类:实现接口HandlerInterceptor中的方法,并进行配置

package com.example.demo2.Config_file;


import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//拦截器
public class loginHandlerInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object loginuser = request.getSession().getAttribute("loginuser");  //获取到由前端访问时,将咱们之前设置登录控制器设置的属性传递到类:获取前端传递的属性
        if (loginuser ==null){          //判断属性值是否为空,如果为空则是用户没有登录成功
             request.setAttribute("msg","没有权限,请先登录");
             request.getRequestDispatcher("/index.html").forward(request,response);   //如果没有登录成功则,跳转到索引网页,并返回false值
             return false;

        }
        else{ return true;}   //如果值不为空,说用户是通过登录界面,这是拦截器就会返回true
    }


}

注意:此篇博客是与上几篇文章相连的,这里的属性标注在上篇文章有提到过,有兴趣的同学可以去了解一下 

将自定义的拦截器添加到容器中,调用此方法

package com.example.demo2.Config_file;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class Myconfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/index.html").setViewName("index");
        registry.addViewController("/main.html").setViewName("dashboard");
//        registry.addViewController("/list.html").setViewName("list");


    }
    @Bean
    public LocaleResolver localeResolver(){
        System.out.println("shuchu");
        return new MylocalResolver();
    }
    //拦截器:配置
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new loginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/index.html","/","/user/login","/asserts/css/*","/asserts/js/*","/asserts/img/*","/list.html","/emps");
    }
}

重写方法在/目录下不允许被访问除了"/index.html","/","/user/login","/asserts/css/*","/asserts/js/*","/asserts/img/*","/list.html","/emps"

这几个界面内容能够被访问,其他的则是在登录成功拦截器返回值为true后进行跳转。返回false则跳转到索引界面

那如果没有登录成功我们需要提醒前端访问的用户

还记得之前在用户登录失败时提醒用户的内容吗?

 在索引网页加了一行这样的代码

只需要在拦截器添加一个属性,并设置显示的内容,

 request.setAttribute("msg","没有权限,请先登录");

如果用户没有登录成功,拦截器会设置一个属性msg,并为这个属性赋值,并传递给到索引网页,前端网页拿到这个属性,会先判断这个属性的值是否为空,如果为空,则不需要显示,不为空则需要显示,msg这个属性实现两个信息的显示,当密码错误时,会显示信息填写错误,如果没有进行登录访问其他界面则是提示没有权限需要登录

网页拦截器设置成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想睡醒的梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值