spring boot 拦截器 登录权限拦截
2019-03-26 15:21
513 查看
版权声明:原创欢迎转载,转载请注明出处 https://blog.csdn.net/ye17186/article/details/88820896
一、需求
系统中,除登录接口/login以外,其他所有接口,必须用户登录后才能访问。
二、实现
创建一个拦截器,拦截除/login以外的所有请求,校验用户是否已登录,如果已登录,则放行,否则拦截请求,给出未登录信息提示。
创建LoginInterceptor类,实现HandlerInterceptor接口,重写preHandle方法
[code]package com.yclouds.service.demo.interceptor; import com.yclouds.common.core.error.code.BaseError; import com.yclouds.common.core.response.ApiResp; import com.yclouds.common.core.utils.JsonUtils; import com.yclouds.common.core.utils.StringUtils; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.cors.CorsUtils; import org.springframework.web.servlet.HandlerInterceptor; /** * 登录拦截器 * * @author ye17186 * @version 2019/3/26 14:49 */ public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { // PreFlight请求,忽略本拦截器 if (CorsUtils.isPreFlightRequest(request)) { return true; } boolean flg = false; // 是否通过 String token = request.getHeader("token"); // 有token表示用户已登录(生产环境应该校验token合法性) if (StringUtils.isNotEmpty(token)) { flg = true; } else { // 根据系统需要,返回特定的消息格式 ApiResp resp = ApiResp.retFail(BaseError.SYSTEM_NO_LOGIN); write(request, response, JsonUtils.toJson(resp)); } return flg; } /** * 通过response返回错误信息给前端 * * @param request 请求 * @param response 响应 * @param content 响应内容 */ private void write(HttpServletRequest request, HttpServletResponse response, String content) throws IOException { String origin = request.getHeader("Origin"); response.setHeader("Access-Control-Allow-Origin", origin); response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); response.getWriter().write(content); } }
注册该拦截器
[code]package com.yclouds.service.demo.config; import com.yclouds.service.demo.interceptor.LoginInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * 拦截器配置 * * @author ye17186 * @version 2019/3/26 15:00 */ @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { // 注册登录拦截器,拦截除/login以外的所有请求 registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") .excludePathPatterns("/login"); } }
三、测试
[code]@GetMapping("/say3") public ApiResp sayHello3() { log.info("业务处理..."); return ApiResp.retOK(); }
1、发送不带token的请求,请求被拦截,并返回的错误信息提示
2、发送带token的请求,请求正确处理
相关文章推荐
- spring boot 使用拦截器 实现 用户登录拦截
- 如何在SpringBoot中配置拦截器,实现登录拦截?
- springboot(十四):springboot整合shiro-登录认证和权限管理
- 一个使用 Spring 拦截器进行登录拦截的小 Demo
- spring boot LoginInterceptor(登录拦截器)无法注入bean
- 七、spring boot 1.5.4 集成shiro+cas,实现单点登录和权限控制
- springboot(十四):springboot整合shiro-登录认证和权限管理
- spring boot框架学习8-【干货】spring boot的web开发(4)-自定义拦截器处理权限
- springboot+aop,拦截操作日志,登录日志
- Spring boot之登录拦截器
- springboot学习之权限系统登录验证SpringSecurity
- Spring Filter过滤器,Spring拦截未登录用户权限限制
- springboot整合shiro-登录认证和权限管理
- Spring Boot + Java爬虫 + 部署到Linux(六、后端Controller实现、下载文件以及登录验证拦截器)
- Spring Filter过滤器,Spring拦截未登录用户权限限制
- springboot(十四):springboot整合shiro-登录认证和权限管理
- 转载:Spring Boot (十四):springboot整合shiro-登录认证和权限管理
- springboot整合shiro-登录认证和权限管理
- [转载]Struts2拦截器 实现未登录拦截和权限控制
- Spring Filter过滤器,Spring拦截未登录用户权限限制