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

flashfxp怎么上传对应网站空间黑河做网站的

flashfxp怎么上传对应网站空间,黑河做网站的,厦门外贸网站,建设银行网站点不进去了怎么办1. 简介SpringSecurity 是一个强大且高度可定制的认证和授权框架 认证&#xff1a;身份验证&#xff0c;判断访问者是否为系统用户&#xff0c;某些操作只有系统用户才能访问 授权&#xff1a;访问控制&#xff0c;判断系统用户是否具备访问某个功能的权限依赖导入<!--sprin…

1. 简介

  1. SpringSecurity 是一个强大且高度可定制的认证授权框架

    认证:身份验证,判断访问者是否为系统用户,某些操作只有系统用户才能访问

    授权:访问控制,判断系统用户是否具备访问某个功能的权限

  2. 依赖导入

<!--spring security-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. 原理

Spring Security 的核心实现是一条过滤器链!Spring Security的所有功能、特性都建立在这条过滤器链上!

2.1 通过Debug查看过滤器链:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.2 核心过滤器:

  • UsernamePasswordAuthenticationFilter: 认证核心。

  • ExceptionTranslationFilter: 处理认证和授权异常。

  • FilterSecurityInterceptor: 授权核心。

3. 认证

3.1 核心认证流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.2 核心接口

  • Authentication:身份认证令牌,封装了用户相关信息

  • AuthenticationManager:认证管理对象,用于对 Authentication 对象进行认证

  • UserDetailsService:用户信息查询服务,定义了 loadUserByUsername 方法查询用户信息

  • UserDetails:封装了用户的详细信息,UserDetailsService 查询的用户信息都会封装到这个对象中

3.3 问题一

3.3.1 问题介绍

UserDetailsService 在查询用户信息时,是从内存中查询的,而实际上,用户信息是存储在数据库中的,所以我们需要修改为从数据库中查询用户信息

3.3.2 解决方案

自定义 UserDetailsService 接口的实现类,从数据库中查询用户相关信息。

3.3.3 执行步骤

1. 自定义 UserDetailsService 接口的实现类

2. 创建 UserDetails 的实现类,用于分装 User 对象

3. 在输入正确的用户名和密码的情况下,登录失败了,控制台报如下错误

问题简介

原因

  • 如果未注入 PasswordEncoder 接口的加密实现,则数据库中的密码格式必须为:{id}encodedPassword

解释

  • id:表示加密方式,可以是 noop(不加密)、bcrypt、MD5、SHA-1、SHA-256等

  • encodedPassword:表示使用id指定的方式进行加密后的结果

SpringSecurity 会根据 id 指定的加密规则对密码进行验证,如果不指定加密方式,就会出现上面的错误!

修改数据库密码格式是可以实现的,但是不推荐,我们使用注入 PasswordEncoder 的方式!!!

解决方案

将 PasswordEncoder 的具体实现注入到Spring容器中,注册时密码的加密也要使用 PasswordEncoder

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4. 使用自定的加密方式

使用上面现成的 BCryptPasswordEncoder 加密方式已经很安全了,但是如果有特定的需求也可以自己定义

  • 自定义加密类
public class MyPasswordEncoder implements PasswordEncoder {public String encode(CharSequence rawPassword) {//这里填写自己自定义加密方式if (StringUtils.hasText(rawPassword))return DigestUtils.md5DigestAsHex(rawPassword.toString().getBytes(StandardCharsets.UTF_8));return null;}//自定义密码匹配规则(就是讲传来的密码加密后比对即可)public boolean matches(CharSequence rawPassword, String encodedPassword) {return encode(rawPassword).equals(encodedPassword);}
}
  • 在配置类中,将自定义的加密类注入容器
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Beanpublic PasswordEncoder passwordEncoder() {//return NoOpPasswordEncoder.getInstance(); // 不加密处理,不推荐!//return new BCryptPasswordEncoder(); // 推荐!return new MyPasswordEncoder(); // 自定义加密处理}
}

3.4 问题二

3.4.1 问题描述

之所有使用 SpringScurity 登录一次后下一次不需要在登录了,他主要是基于 Session 实现的这个功能的,但是在前后端分离的情况下,前后端项目分别部署在不同的服务器上,导致 session 无法正常使用。

需要使用 **token(令牌)**认证:在用户登录成功之后,服务器需要为客户端创建一个 token,并将这个 token 作为 key 保存用户信息到 redis,响应时将这个 token 连同其它信息一并返回给客户端,客户端需要将这个 token 保存来,之后的请求都要将这个 token 发送给服务器,服务器通过这个 token 从 redis 中获取用户信息。

3.4.2 解决方案

  1. 自定义登录接口,将用户名和密码封装成 Authentication 对象,调用 AuthenticationManager的 authenticate 方法进行认证,认证通过后会返回 Authentication用户,生成 token 并将返回的Authentication对象存入redis,将token返回给客户端

  2. 自定义认证过滤器,根据请求中的token从redis中获取身份认证令牌Authentication对象,并调用SecurityContextHolder.getContext().setAuthentication方法将Authentication对象保存下来

  3. 将自定义认证过滤器注入到Spring容器中,并让这个过滤器在UsernamePasswordAuthenticationFilter之前执行

3.4.3 执行步骤

1. 修改 SpringSecurity 的配置类中的配置

  1. 将认证管理对象 AuthenticationManager 注入到Spring容器中,我们自定义登录接口时要用到
  2. 对请求进行认证配置:访问登录接口时,不需要认证
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Beanpublic PasswordEncoder passwordEncoder() {// return NoOpPasswordEncoder.getInstance(); // 不加密处理,不推荐!return new BCryptPasswordEncoder(); // 强烈推荐!}//向Spring 注入 AuthenticationManager 对象@Bean@Overridepublic AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();}//这里可以指定你自定义的登录路径,无需经过认证@Overrideprotected void configure(HttpSecurity http) throws Exception {// 前后端分离固定配置separationModel(http);// 对请求进行认证配置http.authorizeRequests()// (匿名访问)无需认证也可以访问 anonymous:匿名.antMatchers("/user/login").anonymous()// 其它请求认证通过后可以访问.anyRequest().authenticated();}//前后端分离固定配置private void separationModel(HttpSecurity http) throws Exception {// 禁用csrfhttp.csrf().disable();// 允许跨域http.cors();// 不使用sessionhttp.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);}
}

2. 自定义登录接口

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.4.4. 编写认证过滤器

主要实现判断用户是否已经登录,如果已经登录,则无需再登录

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.4.5 设置自定义过滤器放过滤器链的位置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4. 授权

4.1 简介

实际场景应用

  • 一个系统中有很多功能,而某些功能需要一定的权限才能使用,例如商城中的商品,普通用户只能查看和购买,但不具备删除、修改的权限,这时就需要权限控制,也就是所谓的授权。

  • 但是要注意的是这里并不是简单的将前端页面跟该功能相关的按钮抹去(此时可以通过路径也可以执行该功能),还要对访问接口进行权限限制。

4.2 快速使用

这里用户的权限不通过数据库的方式去获取,而是通过写死的方式,这样便于演示。

1. 首先需要在 SpringSecurity 的配置类上添加下面注解,来开启权限控制的注解开发

@EnableGlobalMethodSecurity(prePostEnabled = true)

2. 然后在 Controller 的方法上使用 @PreAuthorize 注解进行权限控制

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

登录成功之后,“/test” 接口可以正常访问,而"/delete"接口访问失败,因为不具备”delete“权限

用户的权限信息,需要在认证成功之后查询,连同用户信息一起封装到UserDetails中

3. 为对象添加权限(写死的方式)

  • 修改 UserDetail 字段

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 为 Userdetail 的权限列表赋值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.3 通过数据库获取权限信息

4.3.1 RBAC模型(数据库设计模型)

RBAC(Role-Based Access Control)权限模型:基于角色的权限控制,是一种比较通用的权限模型,最常用!通俗一点就是在用户与权限之间加入一个角色,以角色为桥梁获取用户所具有的权限。

4.3.2 编写 Mapper

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.3.3 业务实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.4 其他权限控制注解

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.5 自定义权限校验方法

用的不多,了解即可

  1. 定义用于校验权限的类

    @Component("ex")
    public class MyExpressionRoot {public boolean hasAuthority(String authority){//获取身份令牌Authentication authentication = SecurityContextHolder.getContext().getAuthentication();//获取权限Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();//循环判断for (GrantedAuthority grantedAuthority : authorities) {String role = grantedAuthority.getAuthority();if (role.equals(authority)) {return true;}}return false;}
    }
    
  2. 在@PreAuthorize注解中使用自定义校验方法

    @DeleteMapping("delete")
    //ex是校验实力在Spring容器中的唯一标识
    @PreAuthorize("@ex.hasAuthority('delete')")
    public String delete() {return "删除成功!";
    }
    
http://www.dtcms.com/a/529957.html

相关文章:

  • h5响应式网站制作装网要多少钱
  • 腾讯快速建站平台seo站内优化和站外优化
  • 晋城龙采网站建设做外贸的专业网站
  • git 修改commit信息以及提交
  • 网站建设不包括哪个阶段wordpress中文企业主题 下载地址
  • BabybloomSG项目RAG系统优化与多模型对比分析报告
  • 网站优化排名的方法外贸订单网站有哪些
  • 找外包做网站如何免费制作app
  • 小迪安全v2023学习笔记(一百三十八讲)—— Linux系统权限提升内核溢出辅助项目VulnhubDcowPwnkitDirt
  • 网站快速收录付费入口企业网站制作比较好的
  • 开创网站要怎么做微信公众号绑定网站
  • 深圳 汽车网站建设江苏省建设考试信息管理系统网站
  • “人可以向前走“与“空间是螺旋运动的“并不矛盾——时空螺旋运动与局部运动的统一:基于张祥前统一场论的完备推导
  • 可以做软件外包项目的网站电子商务网站建设ppt模板
  • 有哪些可以做课件赚钱的网站平面设计风格有哪些类型
  • 个人房源网seo专员
  • 网站图片怎么换南昌建设局网站查询塔吊证
  • 不记得在哪里做的网站备案上海上市公司100强
  • Codeforces 1060 Div2(ABC1C2D)
  • 代码随想录 617.合并二叉树
  • 上贵州省建设厅的网站深圳网站制作公司讯
  • 为什么要做一个营销型网站揭阳网站制作软件
  • 集团网站设计特性怎样将网站建设后台装到云上
  • 二手交易平台网站的建设青岛手机端网络推广培训
  • C++ brpc Channel 管理封装方案
  • 合肥网站建设报价做美食教程的网站
  • 企业网站空间买虚拟主机网站做后怎么可以在百度搜索到
  • 网站建设部岗位职责直播软件开发公司
  • app免费制作网站模板北京最新新闻
  • 网站建设物理架构服务管理系统