广州集团网站建设,Wordpress如何设置运费,宁波网站推广软件,电商网站优化方案登录功能#xff1a; 前端传递json格式的数据。username#xff08;用户名#xff09;password#xff08;密码#xff09;。controller层对数据进行接收#xff0c;由于是接收json格式的数据#xff0c;所以我们把它封装到一个对象里面#xff0c;由于登录是员工进行登…登录功能 前端传递json格式的数据。username用户名password密码。controller层对数据进行接收由于是接收json格式的数据所以我们把它封装到一个对象里面由于登录是员工进行登录所以我们封装到员工表中public Result login(RequestBody Emp emp){} 接收json格式的数据我们使用RequestBody注解封装到对象中。看到返回类型我们自定义了一个返回的实体类。LoginInfo 然后调用service层进行业务处理。调用mapper层接口把controller传递给service层的emp参数传递给mapper层 mapper层根据参数对数据库进行查询返回值类型是emp。如果查询到结果不为null代表登录成功查询结果为null代表查询失败。 service层根据mapper层的返回结果进行判断如果返回的emp不是null则对返回出来的数据进行封装 return new LoginInfo(emp.getId,emp.getUserName,emp.getname,null)如果查询到没有数据就返回null。 由于我们的service1层直接返回了 loginInfo所以在返回给前端的时候还要进行判断如果Logininfo不为null返回Result.success(loginInfo)如果logininfo为nullreturn Result.error(用户名或密码错误); 引子 虽然我们写了 登录的接口但是我们测试发现就算在没有登录的情况下用户还是可以随便对我们的系统进行访问。 我们需要进行登录校验如果用户登录我们就下发jwt令牌然后作为登录的标记在每次用户请求的时候都要携带这个jwt令牌统一拦截器会根据有没有令牌进行校验。有就放行没有就拦截。 登录标记用户登录之后在后续的每一次请求中都可以获取到该标记【会话技术】 统一拦截过滤器filter拦截器interceptor 登录校验 会话技术 会话用户打开浏览器访问web服务器的资源会话建立直到有一方断开连接会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪 一种维护浏览器状态的方法服务器需要识别多次请求是否来自于同一浏览器以便在同一次会话的多次请求间共享数据。 会话跟踪方案 客户端会话跟踪技术Cookie 优点 HTTP协议中支持的技术 缺点 移动App无法使用Cookie不安全用户可以自己禁用cookieCookie不能跨域 区分跨域的三个维度 协议IP/域名端口 服务端会话跟踪技术Session 优点 HTTP协议中支持的技术 缺点 移动端APP无法使用Cookie 不安全用户可以自己禁用Cookie Cookie不能跨域 JWT令牌 优点 支持PC端、移动端 解决集群环境下的认证问题 减轻服务器端存储压力 缺点 需要自己实现 全称 JSON Web Token https://jwt.io/定义了一种简洁的、自包含的格式用于在通信双方以json数据格式安全的传输信息。 组成 第一部分Header(头记录令牌类型、签名算法等。 例如{alg:HS256,type:JWT} 第二部分Payload(有效载荷携带一些自定义信息、默认信息等。 例如{id:1,username:Tom} 第三部分Signature(签名防止Token被篡改、确保安全性。将header、payload融入并加入指定秘钥通过指定签名算法计算而来。 jwt依赖 dependency groupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactId version0.9.1/version
/dependency 生成令牌 Test public void testGenJwt() { MapString, Object claims new HashMap(); claims.put(id, 10); claims.put(username, itheima); String jwt Jwts.builder().signWith(SignatureAlgorithm.HS256, SVRIRUlNQQ) .addClaims(claims) .setExpiration(new Date(System.currentTimeMillis() 12*3600*1000)) .compact(); System.out.println(jwt);} 解析令牌 Testpublic void testParseJwt() { Claims claims Jwts.parser().setSigningKey(SVRIRUlNQQ) .parseClaimsJws(eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MTAsInVzZXJuYW1lIjoiaXRoZWltYSIsImV4cCI6MTY5ODYyMjI1NX0.l6D1WG3...) .getBody(); System.out.println(claims);} 过滤器Filter 快速入门 概念 Filter 过滤器是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来从而实现一些特殊的功能。 过滤器一般完成一些通用的操作比如登录校验、统一编码处理、敏感字符处理等。 快速操作 定义Filter定义一个类实现 Slf4j //WebFilter(urlPatterns /*) // 拦截所有请求 public class DemoFilter implements Filter { Override public void init(FilterConfig filterConfig) throws ServletException { log.info(DemoFilter init 方法执行了... ); } Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { log.info(DemoFilter diFilter 方法执行了 放行前执行...); chain.doFilter(servletRequest,servletResponse); //放行 log.info(DemoFilter diFilter 方法执行了 放行后执行...); } Override public void destroy() { log.info(DemoFilter destory 方法执行了...); } } 配置FilterFilter类上加WebFilter注解配置拦截路径。引导类上加ServletComponentScan 开启Servlet组件支持。 ServletComponentScan //开启spring boot对javaweb组件的支持filter SpringBootApplication public class TilasRun { public static void main(String[] args) { SpringApplication.run(TilasRun.class, args); }
} 详解 放行后访问对应资源资源访问完成后还会回到Filter中吗 会回到filter类中 如果回到Filter中是重新执行还是执行放行后的逻辑呢 会执行放行后的逻辑 拦截路径 拦截具体路径 /login 只有访问 /login 路径时才会被拦截。 目录拦截 /emps/* 只有访问/emps下的所有资源才会被拦截。 拦截所有 /* 访问所有资源都会被拦截 过滤器链 介绍 一个web应用中可以配置多个过滤器这多个过滤器就形成了一个过滤器链。 顺序 注解配置的Filter优先级是按照过滤器类名字符串的自然排序。 登录校验-Filter 所有的请求拦截到了之后都需要校验令牌吗 有一个例外登录请求不用拦截。 拦截到请求后什么情况下才可以放行执行操作业务 有令牌且令牌校验通过合法否则都返回未登录错误结果 步骤 1获取请求url。 2判断请求url中是否包含login如果包含说明是登录操作放行。 3获取请求头中的令牌token。 4判断令牌是否存在如果不存在响应401。 5解析token如果解析失败响应401 。 6放行。 拦截器Interceptor 快速入门 概念 是一种动态拦截方法调用的机制类似于过滤器。Spring框架中提供的主要用来动态拦截控制器方法的执行。 作用 拦截请求在指定的方法调用前后根据业务需要执行预先设定的代码。 定义拦截器实现HandlerInterceptor接口并重写其所有方法。 注册拦截器 详解 /* 一级路径 能匹配/depts/emps/login不能匹配 /depts/1 /** 任意路径 能匹配/depts/depts/1/depts/1/2 /depts/* /depts下的下一级路径 能匹配/depts/1不能匹配/depts/1/2/depts /depts/** /detps下的任意级路径 能匹配/deptsdepts/1/2 不能匹配 emps/1 Filter和interceptot的区别 接口规范不同过滤器需要实现Filter接口而拦截器需要实现HandlerInterceptor接口。 拦截范围不同过滤器Filter会拦截所有的资源而Interceptor只会拦截Spring环境中的资源。