springboot实现拦截器

当我们写一个web项目,都需要配置一个拦截器,这样就可以只有登录后才能访问其它页面。在之前学习的Spring中拦截器可以在XML文件中进行配置,而在SpringBoot中我们可以手动实现拦截器功能。
前面写了一个登录界面 下面来介绍一个拦截器,拦截器在web项目中非常重要,通过例子让大家了解一下:
这个是首页
现在没有配置拦截器在这里插入图片描述
可以看出首页正常访问,

在这里插入图片描述
只有当我们输入密码是才能进去,但是不输入密码 我们也能进去
直接访问你需要的网页;
在这里插入图片描述
这里可以看出 不用密码也行,这 不给歹人机会了吗?
所以我们要配置拦截器 配置好的拦截器当你直接登录main.html时会转跳到首页 显示没有访问权限
这里就可以看出拦截器的作用了
在这里插入图片描述

好了 拦截器的功能说完了 ,接下来看看怎样是先把。

首先我们需要实现一个登录功能。
这里是一个简单的登录页面,可将用户名和密码发给后端。

Title 登录1
密码

登录

后端登录的简单实现

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值