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

静态资源

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

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

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

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

自定义类:实现接口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;@Configurationpublic 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这个属性实现两个信息的显示,当密码错误时,会显示信息填写错误,如果没有进行登录访问其他界面则是提示没有权限需要登录

网页拦截器设置成功