本次项目所有能够使用的静态资源可以免费进行下载
静态资源
如果按照之前的内容进行访问时会出现一种问题?
上面访问则是在没有登录的情况下,直接访问到登录后的界面。这怎么能允许?
通过拦截器进行设置,只有登录成功时才能访问到成功界面。
代码很简单就是在自定义的组件中重写一个方法,并在方法中定义那些是能够访问的路径,那些则是不允许从前端直接访问的页面
自定义类:实现接口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这个属性实现两个信息的显示,当密码错误时,会显示信息填写错误,如果没有进行登录访问其他界面则是提示没有权限需要登录
网页拦截器设置成功