主页 > 手机  > 

使用FilterANDInterceptor校验等录(全网独一份,机不可失)

使用FilterANDInterceptor校验等录(全网独一份,机不可失)

说明:基于spring boot进行的校验

1.熟悉如何使用jwt令牌。(不会的看这里:带你领略JWTl令牌的魅力!!!-CSDN博客)

 Filter和Interceptor共用文件:(可以仿照,根据你的实际情况)

controller层代码:

/* * Copyright (c) 2020, 2023, All rights reserved. * */ package com.itheima.controller; import com.itheima.pojo.Emp; import com.itheima.pojo.Result; import com.itheima.service.EmpService; import com.itheima.utils.JwtUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; /** * <p>Project: tlias-web-management - LoginController</p> * <p>Powered by scl On 2023-10-16 14:16:46</p> * <p>描述:<p> * * @author 孙臣龙 [1846080280@qq ] * @version 1.0 * @since 17 */ @Slf4j @RestController public class LoginController { @Autowired private EmpService empService; @PostMapping("/login") public Result login(@RequestBody Emp emp) { log.info("员工登录:{}", emp); Emp e = empService.login(emp); //登录成功生成令牌,下发令牌 if (e != null) { Map<String, Object> climas = new HashMap<>(); climas.put("id", e.getId()); climas.put("name", e.getName()); climas.put("username", e.getUsername()); String s = JwtUtils.generateJwt(climas); return Result.success(s); } return Result.error("用户名或密码错误"); } }

service层代码:

package com.itheima.service; import com.itheima.pojo.Emp; import com.itheima.pojo.PageBean; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; import java.util.List; /** * <p>Project: tlias-web-management - EmpService</p> * <p>Powered by scl On 2023-10-12 15:31:01</p> * <p>描述:<p> * * @author 孙臣龙 [1846080280@qq ] * @version 1.0 * @since 17 */ public interface EmpService { /** * 用户登录 * @param emp * @return */ Emp login(Emp emp); }

mapper层代码:

package com.itheima.mapper; import com.itheima.pojo.Emp; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.time.LocalDate; import java.util.List; /** * <p>Project: tlias-web-management - EmpMapper</p> * <p>Powered by scl On 2023-10-12 15:29:01</p> * <p>描述:<p> * * @author 孙臣龙 [1846080280@qq ] * @version 1.0 * @since 17 */ @Mapper public interface EmpMapper { /** * 用户登录 * @param emp * @return */ @Select("select * from emp where username=#{username} and password=#{password}") Emp getByUserNameAndPwd(Emp emp); }

Result(响应代码):

package com.itheima.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class Result { private Integer code;//响应码,1 代表成功; 0 代表失败 private String msg; //响应信息 描述字符串 private Object data; //返回的数据 //增删改 成功响应 public static Result success(){ return new Result(1,"success",null); } //查询 成功响应 public static Result success(Object data){ return new Result(1,"success",data); } //失败响应 public static Result error(String msg){ return new Result(0,msg,null); } }  2.Filter校验器: ①:首先需要在pom文件中添加依赖: <!--jwt令牌--> <!-- jjwt-api --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <!-- fastJson--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency>  ②:创建Filter过滤器: /* * Copyright (c) 2020, 2023, All rights reserved. * */ package com.itheima.filter; import com.alibaba.fastjson.JSONObject; import com.itheima.pojo.Result; import com.itheima.utils.JwtUtils; import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; import java.io.IOException; import java.util.Locale; /** * <p>Project: tlias-web-management - LoginCheckFilter</p> * <p>Powered by scl On 2023-10-17 16:30:20</p> * <p>描述:<p> * * @author 孙臣龙 [1846080280@qq ] * @version 1.0 * @since 17 */ @Slf4j @WebFilter(urlPatterns = "/*") public class LoginCheckFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse resp= (HttpServletResponse) servletResponse; HttpServletRequest req= (HttpServletRequest) servletRequest; //获取url String url = req.getRequestURI().toString(); log.info("获取的url:{}",url); //判断url中是否包含login if (url.contains("login")){ filterChain.doFilter(servletRequest,servletResponse); return; } //获取请求头的内容 String jwt = req.getHeader("token"); //判断jwt令牌是否存在 if (!StringUtils.hasLength(jwt)){ log.info("请求头token不存在"); Result error = Result.error("NOT_LOGIN"); String nologin = JSONObject.toJSONString(error); resp.getWriter().write(nologin); return; } //解析jtw令牌 try { JwtUtils.parseJWT(jwt); } catch (Exception e) { e.printStackTrace(); log.info("jwt令牌解析错误,"); Result error = Result.error("NOT_LOGIN"); String nologin = JSONObject.toJSONString(error); resp.getWriter().write(nologin); return; } //jwt令牌解析成功,放行 log.info("放行"); filterChain.doFilter(servletRequest,servletResponse); } } 3.Interceptor拦截器: ①:创建拦截器: /* * Copyright (c) 2020, 2023, All rights reserved. * */ package com.itheima.interceptor; import com.alibaba.fastjson.JSONObject; import com.itheima.pojo.Result; import com.itheima.utils.JwtUtils; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; /** * <p>Project: tlias-web-management - LoginCheckInterceptor</p> * <p>Powered by scl On 2023-10-17 17:18:06</p> * <p>描述:<p> * * @author 孙臣龙 [1846080280@qq ] * @version 1.0 * @since 17 */ @Slf4j @Component public class LoginCheckInterceptor implements HandlerInterceptor { @Override //目标资源方法运行前运行,返回true:放行,返回false:不放行 public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception { //获取url String url = req.getRequestURI().toString(); log.info("获取的url:{}",url); //判断url中是否包含login if (url.contains("login")){ return true; } //获取请求头的内容 String jwt = req.getHeader("token"); //判断jwt令牌是否存在 if (!StringUtils.hasLength(jwt)){ log.info("请求头token不存在"); Result error = Result.error("NOT_LOGIN"); String nologin = JSONObject.toJSONString(error); resp.getWriter().write(nologin); return false; } //解析jtw令牌 try { JwtUtils.parseJWT(jwt); } catch (Exception e) { e.printStackTrace(); log.info("jwt令牌解析错误,"); Result error = Result.error("NOT_LOGIN"); String nologin = JSONObject.toJSONString(error); resp.getWriter().write(nologin); return false; } //jwt令牌解析成功,放行 log.info("放行"); return true; } @Override //目标资源方法后运行 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle..."); } @Override //最后运行 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion..."); } }

说明一下:有实体类代码我没有上传(需要根据你自己的数据库决定),Filter和Interceptor使用一个就可以了。

标签:

使用FilterANDInterceptor校验等录(全网独一份,机不可失)由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“使用FilterANDInterceptor校验等录(全网独一份,机不可失)