当我们写一个web项目,都需要配置一个拦截器,这样就可以只有登录后才能访问其它页面。在之前学习的Spring中拦截器可以在XML文件中进行配置,而在SpringBoot中我们可以手动实现拦截器功能。
前面写了一个登录界面 下面来介绍一个拦截器,拦截器在web项目中非常重要,通过例子让大家了解一下:
这个是首页
现在没有配置拦截器
可以看出首页正常访问,
只有当我们输入密码是才能进去,但是不输入密码 我们也能进去
直接访问你需要的网页;
这里可以看出 不用密码也行,这 不给歹人机会了吗?
所以我们要配置拦截器 配置好的拦截器当你直接登录main.html时会转跳到首页 显示没有访问权限
这里就可以看出拦截器的作用了
好了 拦截器的功能说完了 ,接下来看看怎样是先把。
首先我们需要实现一个登录功能。
这里是一个简单的登录页面,可将用户名和密码发给后端。
密码
登录
后端登录的简单实现
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.thymeleaf.util.StringUtils;
import javax.servlet.http.HttpSession;
@Controller
public class LoginController {
@RequestMapping("/user/login")
public String login(String username, String password, Model model, HttpSession session){
// return username+"---"+password;
if(!StringUtils.isEmpty(username) && "asd".equals(password)){ //当账号不是空且密码为“asd” 表示登录成功
session.setAttribute("User",username);
return "test";
}else{
model.addAttribute("msg","用户名或密码错误!");
return "index";
}
}
}
登录成功会跳转到test页面,如果没有拦截器,我们就可以直接在网址上访问test页面无需登录,显然这会存在一些安全问题。
拦截器的实现
登录成功后会在session中存入该用户对象,然后在其它页面先进行session的验证来判断是否登录。
import org.springframework.web.servlet.HandlerInterceptor;
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 o = request.getSession().getAttribute("User");
if(o == null){
request.setAttribute("msg","没有权限");
request.getRequestDispatcher("/").forward(request,response);
return false;
}
return true;
}
}
注册拦截器
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//如果扩展SpringMVC 官方建议这样操作
@Configuration
//@EnableWebMvc //导入一个类 自动装配失效
public class MyMvcConfig_2 implements WebMvcConfigurer {
//视图跳转
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName(“index”);
}
//配置拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/index.html","/","/user/login"); //不被拦截的请求
}
}
原文链接:https://blog.csdn.net/qq_45162113/article/details/111923296