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

可以做视频的一个网站大学生个人网页设计代码

可以做视频的一个网站,大学生个人网页设计代码,自己做店铺网站,网站建设上海网站制作文章目录 1、SpringSecurity原理2、UserDetails接口3、UserDetailService接口4、权限配置 1、SpringSecurity原理 Spring Security是做安全访问控制#xff0c;对所有进入系统的请求进行拦截#xff0c;并做校验#xff0c;这可以通过Filter或者AOP实现#xff0c;Spring … 文章目录 1、SpringSecurity原理2、UserDetails接口3、UserDetailService接口4、权限配置 1、SpringSecurity原理 Spring Security是做安全访问控制对所有进入系统的请求进行拦截并做校验这可以通过Filter或者AOP实现Spring Security靠Filter。 初始化Spring Security时创建一个名为SpringSecurityFilterChain的Servlet过滤器类型为org.springframework.security.web.FilterChainProxy它实现了javax.servlet.Filter因此外部的请求会经过此类FilterChainProxy是一个代理真正起作用的是FilterChainProxy中SecurityFilterChain所包含的各个Filter同时这些Filter作为Bean被Spring管理这些Filter不负责认证或者授权而是交给认证管理器AuthenticationManager和决策管理器AccessDecisionManager进行处理。过滤器嘛就是拦截下获取点东西、修改点东西、干点操作 Spring Security功能的实现就是一系列过滤器链相互配合。 SecurityContextPersistenceFilter 这个Filter是整个拦截过程的入口和出口也就是第一个和最后一个拦截器。会在请求开始时从配置好的 SecurityContextRepository 中获取 SecurityContext然后把它设置给 SecurityContextHolder。在请求完成后将 SecurityContextHolder 持有的 SecurityContext 再保存到配置好的 SecurityContextRepository同时清除 securityContextHolder 所持有的 SecurityContext UsernamePasswordAuthenticationFilter 用于处理来自表单提交的认证该表单必须提供对应的用户名和密码其内部还有登录成功或失败后进行处理的 AuthenticationSuccessHandler 和 AuthenticationFailureHandler这些都可以根据需求做相关改变这些处理器的逻辑可自定义重新实现一下这个处理器 ExceptionTranslationFilter 能够捕获来自 FilterChain 所有的异常并进行处理。但是它只会处理两类异常AuthenticationException 和 AccessDeniedException其它的异常它会继续抛出。 FilterSecurityInterceptor 是用于保护web资源的使用AccessDecisionManager对当前用户进行授权访问 SpringSecurity的执行流程 用户提交用户名密码被安全过滤器链中的UsernamePasswordAuthenticationFilter过滤器拿到并封装为请求Authentication通常情况下是UsernamePasswordAuthenticationToken这个实现类然后过滤器将Authentication提交至认证管理器AuthenticationManager进行认证认证成功后AuthenticationManager身份管理器返回一个被填充满了信息的包括上面提到的权限信息身份信息细节信息但密码通常会被移除Authentication实例SecurityContextHolder安全上下文容器将上一步填充了信息的Authentication通过SecurityContextHolder.getContext().setAuthentication(…)方法设置到其中以看出AuthenticationManager接口认证管理器是认证相关的核心接口也是发起认证的出发点它的实现类为ProviderManager而Spring Security支持多种认证方式因此ProviderManager维护着一个List列表存放多种认证方式最终实际的认证工作是由AuthenticationProvider完成的。而web表单的对应的AuthenticationProvider实现类为DaoAuthenticationProvider它的内部又维护着一个UserDetailsService负责UserDetails的获取。当UserDetailsService接口的loadUserByUsername()方法获取到的User Details对象中的密码和Authentication中的密码一致时认证成功最后AuthenticationProvider将UserDetails填充至Authentication 2、UserDetails接口 看完上面的UserDetails对象和UserDetailsService接口的loadUserByUsername方法后再看之前在内存中定义用户是这样的 UserDetails user2 User.builder().username(liu).password(passwordEncoder().encode(123456)).authorities(teacher:add,teacher:update).roles(teacher).build();查看User类的源码其实现了UserDetails接口因此上面才可以直接创建User对象。 接下来自己定义一个用户类SecurityUser类也去实现UserDetails接口重写UserDetails接口方法时直接写死一个用户信息一会儿new这个自定义的SecurityUser类也就和上面的User.builder一个意思。 public class SecurityUser implements UserDetails {Overridepublic Collection? extends GrantedAuthority getAuthorities() {return null; //未给权限}Overridepublic String getPassword() {//明文为123456//return $2a$10$KyXAnVcsrLaHMWpd3e2xhe6JmzBi.3AgMhteFq8t8kjxmwL8olEDq;return new BCryptPasswordEncoder().encode(123456);}Overridepublic String getUsername() {return liu;}Overridepublic boolean isAccountNonExpired() {return true;}Overridepublic boolean isAccountNonLocked() {return true;}Overridepublic boolean isCredentialsNonExpired() {return true;}Overridepublic boolean isEnabled() {return true;} } UserDetails 接口的7个方法如下图 方法名作用getAuthorities()获取当前用户对象所具有的角色信息getPassword()获取当前用户对象的密码getUsername()获取当前用户对象的用户名isAccountNonExpired()当前账户是否未过期isAccountNonLocked()当前账户是否未锁定isCredentialsNonExpired()当前账户密码是否未过期isEnabled()当前账户是否可用 3、UserDetailService接口 UserDetails的用户对象建好了继续看之前在内存中创建用户的实现思路 InMemoryUserDetailsManager userDetailsManager new InMemoryUserDetailsManager(); userDetailsManager.createUser(user1); userDetailsManager.createUser(user2); InMemoryUserDetailsManager类实现了UserDetailsManager接口UserDetailsManager接口又继承了UserDetailService接口 自己新建一个类UserServiceImpl去实现UserDetailService接口。重写loadUserByUsernam方法并当用户名等于自定义的SecurityUser对象中的用户名时返回SecurityUser对象。 Service public class UserServiceImpl implements UserDetailsService {Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {SecurityUser securityUser new SecurityUser();if(usernamenull || !username.equals(securityUser.getUsername())){throw new UsernameNotFoundException(该用户不存在);}return securityUser;} } 以上其实是自己玩了下5.6两步 重启服务登录下一切正常。 4、权限配置 上面自定义的SecurityUser类中关于权限的方法返回null写个接口返回认证信息可以看到权限字段确实为null 加权 Overridepublic Collection? extends GrantedAuthority getAuthorities() {GrantedAuthority g1()-student:query; //使用lambda表达式//GrantedAuthority g1new SimpleGrantedAuthority(student:query);ListGrantedAuthority grantedAuthorityListnew ArrayList();grantedAuthorityList.add(g1);return grantedAuthorityList;} 顺便使用PreAuthorize注解方便后面看下效果 RestController RequestMapping(/student) public class StudentController {GetMapping(/query)PreAuthorize(hasAuthority(student:query))public String queryInfo(HttpServletRequest request){return I am a student,My name is XXX;} }重启后查看认证信息 梳理完UserDetails和UserDetailsService接口之间的流程和细节方便后面理解SpringSecurity基于数据库认证。
http://www.w-s-a.com/news/936482/

相关文章:

  • 定制网站建设制作h5网站要多久
  • 泰安中呼网站建设有限公司 概况个人网站的设计与实现参考文献
  • 圣诞节网站怎么做怎么获取网站的图片
  • 想找个人做网站音乐网站建设教程视频教程
  • 网站收录一键提交阿里巴巴做网站多少钱
  • 怎么做网站投放广告商务网站建设实训报告
  • 服装代销的网站源码国内电子商务网站有哪些
  • qq空间怎么做网站做企业平台的网站有哪些
  • 网站的优缺点wordpress手机适配模板中文
  • 福州网站建设H5广告公司简介简短
  • 网站404页面的作用app开发郑州
  • 亚马逊中国网站建设目标网站建设的策划
  • 林州网站建设服务徐州网站建设
  • 如何检测网站死链景德镇网站建设哪家好
  • 旅游网站开发目标天津专业做网站公司
  • 名者观看网站快手小程序
  • 网络架构扁平化windows优化大师好不好
  • 安康养老院收费价格表兰州seo整站优化服务商
  • 网站开发技术方案模板无锡网站建设推荐
  • 自助建站系统注册三维家3d设计软件免费
  • 做seo网站标题重要吗郑州众诚建设监理有限公司网站
  • 建设网站南沙区百度关键词推广怎么做
  • 网站建设公司做销售前景好不好石家庄外贸网站制作
  • windows2008做网站网站首页打开速度
  • 做外贸要做什么网站服装设计图
  • 中山市路桥建设有限公司网站网站开发角色分配权限
  • 加强档案网站建设网站搭建好了不用会不会被攻击
  • 维护网站信息网络建设服务
  • 网站建设策划书模板下载用自己电脑配置服务器做网站
  • 360免费建站空间淘宝数据网站开发