当前位置: 首页 > news >正文

网站 专题建设服务网站推广与优化方案

网站 专题建设服务,网站推广与优化方案,小程序代理项目,网站建设的相关政策一言以蔽之,JWT 可以携带非敏感信息,并具有不可篡改性。可以通过验证是否被篡改,以及读取信息内容,完成网络认证的三个问题:“你是谁”、“你有哪些权限”、“是不是冒充的”。 为了安全,使用它需要采用 …

一言以蔽之,JWT 可以携带非敏感信息,并具有不可篡改性。可以通过验证是否被篡改,以及读取信息内容,完成网络认证的三个问题:“你是谁”、“你有哪些权限”、“是不是冒充的”。  
为了安全,使用它需要采用 Https 协议,并且一定要小心防止用于加密的密钥泄露。

采用 JWT 的认证方式下,服务端并不存储用户状态信息,有效期内无法废弃,有效期到期后,需要重新创建一个新的来替换。 
所以它并不适合做长期状态保持,不适合需要用户踢下线的场景,不适合需要频繁修改用户信息的场景。因为要解决这些问题,总是需要额外查询数据库或者缓存,或者反复加密解密,强扭的瓜不甜,不如直接使用 Session。不过作为服务间的短时效切换,还是非常合适的,就比如 OAuth 之类的。

目标功能点

  • 通过填写用户名和密码登录。

    • 验证成功后, 服务端生成 JWT 认证 token, 并返回给客户端。
    • 验证失败后返回错误信息。
    • 客户端在每次请求中携带 JWT 来访问权限内的接口。
  • 每次请求验证 token 有效性和权限,在无有效 token 时抛出 401 未授权错误。
  • 当发现请求带着的 token 有效期快到了的时候,返回特定状态码,重新请求一个新 token。
  • 2.png

    ​​​​​​​Spring Security是Spring家族中的安全框架,可以用来做用户验证和权限管理等。Spring Security是一款重型框架,不过功能十分强大。一般来说,如果项目中需要进行权限管理,具有多个角色和多种权限,我们可以使用Spring Security。SpringSecurity 采用的是责任链的设计模式,是一堆过滤器链的组合,它有一条很长的过滤器链。

准备工作

引入 Maven 依赖

针对这个登录验证的实现,需要引入 Spring Security、jackson、java-jwt 三个包。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.12.1</version>
</dependency>
<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.12.1</version>
</dependency>

配置 DAO 数据层

要验证用户前,自然是先要创建用户实体对象,以及获取用户的服务类。不同的是,这两个类需要实现 Spring Security 的接口,以便将它们集成到验证框架中。

User

用户实体类需要实现 ”UserDetails“ 接口,这个接口要求实现 getUsernamegetPasswordgetAuthorities 三个方法,用以获取用户名、密码和权限。以及 isAccountNonExpired`isAccountNonLockedisCredentialsNonExpiredisEnabled 这四个判断是否是有效用户的方法,因为和验证无关,所以先都返回 true。这里图方便,用了 lombok

@Data
public class User implements UserDetails {private static final long serialVersionUID = 1L;private String username;private String password;private Collection<? extends GrantedAuthority> authorities;...
}

UserService

用户服务类需要实现 “UserDetailsService” 接口,这个接口非常简单,只需要实现 loadUserByUsername(String username) 这么一个方法。这里使用了 MyBatis 来连接数据库获取用户信息。

@Service
public class UserService implements UserDetailsService {@AutowiredUserMapper userMapper;@Override@Transactionalpublic User loadUserByUsername(String username) {return userMapper.getByUsername(username);}...
}

创建 JWT 工具类

这个工具类主要负责 token 的生成,验证,从中取值。

@Component
public class JwtTokenProvider {private static final long JWT_EXPIRATION = 5 * 60 * 1000L; // 五分钟过期public static final String TOKEN_PREFIX = "Bearer "; // token 的开头字符串private String jwtSecret = "XXX 密钥,打死也不能告诉别人";...
}

生成 JWT:从以通过验证的认证对象中,获取用户信息,然后用指定加密方式,以及过期时间生成 token。这里简单的只加了用户名这一个信息到 token 中:

public String generateToken(Authentication authentication) {User userPrincipal = (User) authentication.getPrincipal(); // 获取用户对象Date expireDate = new Date(System.currentTimeMillis() + JWT_EXPIRATION); // 设置过期时间try {Algorithm algorithm = Algorithm.HMAC256(jwtSecret); // 指定加密方式return JWT.create().withExpiresAt(expireDate).withClaim("username", userPrincipal.getUsername()) .sign(algorithm); // 签发 JWT} catch (JWTCreationException jwtCreationException) {return null;}
}

验证 JWT:指定和签发相同的加密方式,验证这个 token 是否是本服务器签发,是否篡改,或者已过期。

public boolean validateToken(String authToken) {try {Algorithm algorithm = Algorithm.HMAC256(jwtSecret); // 和签发保持一致JWTVerifier verifier = JWT.require(algorithm).build();verifier.verify(authToken);return true;} catch (JWTVerificationException jwtVerificationException) {return false;}
}

获取荷载信息:从 token 的荷载部分里解析用户名信息,这部分是 md5 编码的,属于公开信息。

public String getUsernameFromJWT(String authToken) {try {DecodedJWT jwt = JWT.decode(authToken);return jwt.getClaim("username").asString();} catch (JWTDecodeException jwtDecodeException) {return null;}
}

登录

登录部分需要创建三个文件:负责登录接口处理的拦截器,登陆成功或者失败的处理类。

LoginFilter

Spring Security 默认自带表单登录,负责处理这个登录验证过程的过滤器叫“UsernamePasswordAuthenticationFilter”,不过它只支持表单传值,这里用自定义的类继承它,使其能够支持 JSON 传值,负责登录验证接口。

这个拦截器只需要负责从请求中取值即可,验证工作 Spring Security 会帮我们处理好。

滑动验证页面

SpringBoot整合Spring Security + JWT实现用户认证-阿里云开发者社区 

http://www.hkea.cn/news/871612/

相关文章:

  • 国外做科研的网站东莞网站设计公司排名
  • 亿唐网不做网站做品牌原因seo网站诊断报告
  • 宝鸡网站建设东东怎么推广软件让别人下载
  • 21dove谁做的的网站百度一下首页设为主页
  • 猪八戒网站建设推广平台排名前十名
  • 广西建设质监站官方网站站长工具seo综合查询可以访问
  • 通用搭建网站教程优化营商环境的意义
  • 网站中加入地图怎样优化网站排名
  • 网站如何被搜索引擎收录地推推广平台
  • 池州做网站公司游戏搜索风云榜
  • 东丽区做网站网站查询平台
  • wordpress什么主题好用seo优化范畴
  • 局域网端口映射做网站西安竞价托管代运营
  • 重庆网站建设设计公司信息ip网站查询服务器
  • 网站积分的作用seo搜索引擎优化就业前景
  • 珠海网站品牌设计公司简介最新国内新闻重大事件
  • 广东专业网站客服软件定制站长统计app下载大全
  • 广东网站建设公司排名磁力帝
  • 胶南网站建设哪家好成都电脑培训班零基础
  • 集团网站建设哪家好网上推广怎么弄?
  • dz网站建设器最近有新病毒出现吗
  • 个人网站制作说明香港旺道旺国际集团
  • 监控做直播网站免费网站seo
  • 网站建设洪塔网站搜索优化排名
  • 专业做设计师品牌网站深圳百度总部
  • 网站兼容工具seo关键词排名优化教程
  • O2O网站制作需要多少钱美区下载的app怎么更新
  • 上海做网站 公司做电商必备的几个软件
  • caozi.com网站建设中百度指数如何分析数据
  • 互联网舆情处置公司武汉seo外包平台