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

济南网站建设销售招聘网址关键词查询

济南网站建设销售招聘,网址关键词查询,购物网站图片的放大怎么做的,ui界面设计教程一、引出session问题以及token、鉴权 session都是保存在内存中#xff0c;认证用户增多#xff0c;服务端开销明显增大。若是认证的记录保存在某台服务器内存中时#xff0c;意味着用户的下次请求只能够在该服务器内存中进行认证。CSRF跨站攻击 token的鉴权机制#xff1…一、引出session问题以及token、鉴权 session都是保存在内存中认证用户增多服务端开销明显增大。若是认证的记录保存在某台服务器内存中时意味着用户的下次请求只能够在该服务器内存中进行认证。CSRF跨站攻击 token的鉴权机制http协议也是无状态的不需要在服务端去保留用户的认证信息或者会话信息。这也就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录 鉴权流程简单来说就是服务器根据前端传来的用户名与密码生成token并返回前端前端之后的请求都会携带该cookie来进行执行操作认证。 用户使用用户名密码来请求服务器。服务器进行验证用户的信息。服务器通过验证生成token发送给用户一个token。客户端存储token并在每次请求时附送上这个token值。服务端验证token值并返回数据。 这个token必须要在每次请求时传递给服务端它应该保存在请求头里 另外服务端要支持CORS 二、认识JWT三部分详细构成 JWT(JSON WEB TOKEN)是由三段信息构成的将这三段信息文本用.链接一起就构成了Jwt字符串. 第一部分头部(header)。第二部分载荷(payload)携带的信息。第三部分签证signature)。 三、Spring Security  Spring Security 是一个强大且高度可定制的身份验证和访问控制框架。它是保护基于Spring的应用程序的实际标准。Spring Security是一个可以为Java应用程序提供全面安全服务的框架。同时它也可以轻松扩展以满足自定义需求。  主要功能 Authentication (认证)就是用户登录 Authorization (授权)一旦身份验证成功判断用户拥有什么权限可以访问什么资源 防止跨站请求伪造CSRFSpring Security提供了内置的防护机制可以防止跨站请求伪造攻击。 密码存储Spring Security提供了多种密码存储格式包括明文、加密和哈希。 集成其他安全框架Spring Security可以与其他安全框架如OAuth2、JWT等进行集成以提供更全面的安全解决方案。 SpringSecurity 采用的是责任链的设计模式它有一条很长的过滤器链。 SecurityContextPersistenceFilter每次请求处理之前将该请求相关的安全上下文信息加载到 SecurityContextHolder 中。 LogoutFilter用于处理退出登录。 UsernamePasswordAuthenticationFilter用于处理基于表单的登录请求从表单中获取用户名和密码。 BasicAuthenticationFilter检测和处理 http basic 认证。 ExceptionTranslationFilter处理过滤器链中抛出的任何AccessDeniedException和AuthenticationException 。 FilterSecurityInterceptor负责权限校验的过滤器可以看做过滤器链的出口。 2. JWT校验登录的校验流程 首先前端一样是把登录信息发送给后端后端查询数据库校验用户的账号和密码是否正确正确的话则使用jwt生成token并且返回给前端。以后前端每次请求时都需要携带token后端获取token后使用jwt进行验证用户的token是否无效或过期验证成功后才去做相应的逻辑。 四、Spring Boot整合Redis、SpringSecurity、JWT 添加依赖项在 pom.xml 文件中添加以下依赖项 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-security/artifactId/dependencydependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version/dependency /dependencies创建Redis配置类 Configuration public class RedisConfig {Value(${spring.redis.host})private String host;Value(${spring.redis.port})private int port;Beanpublic JedisConnectionFactory jedisConnectionFactory() {return new JedisConnectionFactory(new RedisStandaloneConfiguration(host, port));}Beanpublic RedisTemplateString, Object redisTemplate() {final RedisTemplateString, Object template new RedisTemplate();template.setConnectionFactory(jedisConnectionFactory());return template;} }创建 JwtTokenUtil 类用于生成和验证JWT令牌。 Component public class JwtTokenUtil implements Serializable {private static final long serialVersionUID -2550185165626007488L;private static final String secret mySecret;public String getUsernameFromToken(String token) {return getClaimFromToken(token, Claims::getSubject);}public Date getExpirationDateFromToken(String token) {return getClaimFromToken(token, Claims::getExpiration);}public T T getClaimFromToken(String token, FunctionClaims, T claimsResolver) {final Claims claims getAllClaimsFromToken(token);return claimsResolver.apply(claims);}private Claims getAllClaimsFromToken(String token) {return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();}private Boolean isTokenExpired(String token) {final Date expiration getExpirationDateFromToken(token);return expiration.before(new Date());}public String generateToken(UserDetails userDetails) {MapString, Object claims new HashMap();return doGenerateToken(claims, userDetails.getUsername());}private String doGenerateToken(MapString, Object claims, String subject) {return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(new Date(System.currentTimeMillis())).setExpiration(new Date(System.currentTimeMillis() 5 * 60 * 60 * 1000)).signWith(SignatureAlgorithm.HS512, secret).compact();}public Boolean validateToken(String token, UserDetails userDetails) {final String username getUsernameFromToken(token);return (username.equals(userDetails.getUsername()) !isTokenExpired(token));} }创建 JwtAuthenticationEntryPoint 类用于处理未经授权的请求。 Component public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint, Serializable {private static final long serialVersionUID -7858869558953243875L;Overridepublic void commence(HttpServletRequest request, HttpServletResponse response,AuthenticationException authException) throws IOException {response.sendError(HttpServletResponse.SC_UNAUTHORIZED, Unauthorized);} }创建 JwtRequestFilter 类用于解析和验证JWT令牌。 Component public class JwtRequestFilter extends OncePerRequestFilter {Autowiredprivate MyUserDetailsService myUserDetailsService;Autowiredprivate JwtTokenUtil jwtTokenUtil;Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)throws ServletException, IOException {final String requestTokenHeader request.getHeader(Authorization);String username null;String jwtToken null;if (requestTokenHeader ! null requestTokenHeader.startsWith(Bearer )) {jwtToken requestTokenHeader.substring(7);try {username jwtTokenUtil.getUsernameFromToken(jwtToken);} catch (IllegalArgumentException e) {System.out.println(Unable to get JWT Token);} catch (ExpiredJwtException e) {System.out.println(JWT Token has expired);}} else {logger.warn(JWT Token does not begin with Bearer String);}if (username ! null SecurityContextHolder.getContext().getAuthentication() null) {UserDetails userDetails this.myUserDetailsService.loadUserByUsername(username);if (jwtTokenUtil.validateToken(jwtToken, userDetails)) {UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());usernamePasswordAuthenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);}}chain.doFilter(request, response);} } 配置Spring Security Configuration EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter {Autowiredprivate JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;Autowiredprivate UserDetailsService jwtUserDetailsService;Autowiredprivate JwtRequestFilter jwtRequestFilter;Autowiredpublic void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(jwtUserDetailsService).passwordEncoder(passwordEncoder());}Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}BeanOverridepublic AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();}Overrideprotected void configure(HttpSecurity httpSecurity) throws Exception {httpSecurity.csrf().disable().authorizeRequests().antMatchers(/authenticate).permitAll().anyRequest().authenticated().and().exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint).and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);httpSecurity.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);} }
http://www.w-s-a.com/news/519780/

相关文章:

  • 昆明 网站推广重庆网页优化seo公司
  • 网站排名下降怎么上去设计一套app页面多少钱
  • 专门用来查找网址的网站查公司名字是否被注册
  • 自己创建网站教程河南省建设厅官方网站李学军
  • 一个网站需要多少容量怎样免费设计网站建设
  • 建设工程交易中心网站12306的网站是哪个公司做的
  • 建设网站经营范围自己给公司做网站
  • 河北省住房建设厅政务网站网络营销推广的岗位职责有哪些
  • 上海网站建设优化价格孝义做网站的公司
  • 哪个公司网站做的最好义乌 网站 制作
  • 百度站长工具综合查询wordpress 上传pdf
  • 旅游短租公寓网站建设深圳龙岗招聘网
  • 做海淘是在哪个网站网络查控系统设计方案
  • o2o网站建设代理商微信公众号开发文档
  • 网站设计课程总结关于网站备案的公告
  • 网站建设与运营意义到哪查找网站域名
  • 网站及单位网站建设情况眉县住房和城市建设局网站
  • 网站是否能够被恶意镜像wordpress占用
  • 经典设计网站网站等保测评怎么做
  • 重庆做网站公司贴吧廊坊公司快速建站
  • 海外贸易在什么网站做怎么排名到百度第一页
  • 线上注册公司是在哪个网站做高仿网站
  • 网站构架图网上推广平台哪个好
  • 公司网站首页图片素材vi设计的目的和意义
  • 网站的需求分析都有哪些内容济南营销型网站建设团队
  • 怎么选择优秀的网站建设公司生鲜网站开发
  • 如何编写网站建设销售的心得网站的权限管理怎么做
  • 网站业务员好做吗无忧网站优化
  • 网站随机代码网站建设费 账务处理
  • 商洛网站建设哪家好网站建设 织梦者