首页 > 其他分享 >跨域问题解决、其他权限校验方法

跨域问题解决、其他权限校验方法

时间:2023-04-23 19:58:12浏览次数:34  
标签:hasAuthority 跨域 校验 hello 权限 public

跨域问题解决

浏览器出于安全的考虑,使用XMLHttpRequest对象发起HTTP请求时必须遵守同源策略,否则就是跨域的HTTP请求,默认情况下是被禁止的。同源策略要求源相同才能正常进行通信,即协议、域名、端口号都完全一致。

前后端分离项目前端项目和后端项目一般都不是同源的,所以肯定会存在跨域请求的问题。

所以我们就要处理一下,让前端能进行跨域请求。

1、先对SpringBoot配置,运行跨域请求

@Configuration
public class CorsConfig implements WebMvcConfigurer {
 
    @Override
    public void addCorsMappings(CorsRegistry registry) {
      // 设置允许跨域的路径
        registry.addMapping("/**")
                // 设置允许跨域请求的域名
                .allowedOriginPatterns("*")
                // 是否允许cookie
                .allowCredentials(true)
                // 设置允许的请求方式
                .allowedMethods("GET", "POST", "DELETE", "PUT")
                // 设置允许的header属性
                .allowedHeaders("*")
                // 跨域允许时间
                .maxAge(3600);
    }
}

2、开启SpringSecurity的跨域访问

由于我们的资源都会收到SpringSecurity的保护,所以想要跨域访问还是让SpringSecurity运行跨域访问。

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                //关闭csrf
                .csrf().disable()
                //不通过Session获取SecurityContext
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                // 对于登录接口 允许匿名访问
                .antMatchers("/user/login").anonymous()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated();
 
        //添加过滤器
        http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
 
        //配置异常处理器
        http.exceptionHandling()
                //配置认证失败处理器
                .authenticationEntryPoint(authenticationEntryPoint)
                .accessDeniedHandler(accessDeniedHandler);
 
        //允许跨域
        http.cors();
    }

其他权限校验方法

我们前面都是使用@PreAuthorize注解,然后在在其中使用的是hasAuthority方法进行校验。SpringSecurity还为我们提供了其他例如:hasAnyAuthority,hasRole,hasAnyRole等。

这里我们先不着急去介绍这些方法,我们先去理解hasAuthority的原理,然后再去学习其他方法你就更容易理解,而不是死记硬背区别。并且我们也可以选择定义校验方法,实现我们自己的校验逻辑。

hasAuthority方法实际是执行到了SecurityExpressionRoot的hasAuthority,大家只要断点调试即可自动它内部的校验原理。

它内部其实是调用authentication的getAuthorities方法获取用户的权限列表。然后判断我们存入的方法参数数据在权限列表中。

hasAuthority方法可以传入多个权限,只有用户有其中任意一个权限都可以访问对应资源。

  @PreAuthorize("hasAnyAuthority('admin','test','system:dept:list')")
    public String hello(){
        return "hello";
    }

hasRole要求有对应的角色才可以访问,但是它内部会把我们传入的参数拼接上 ROLE_ 后再去比较。所以这种情况下要用用户对应的权限也要有 ROLE_ 这个前缀才可以。

    @PreAuthorize("hasRole('system:dept:list')")
    public String hello(){
        return "hello";
    }

hasAnyRole 有任意的角色就可以访问。它内部也会把我们传入的参数拼接上 ROLE_ 后再去比较。所以这种情况下要用用户对应的权限也要有 ROLE_ 这个前缀才可以。

    @PreAuthorize("hasAnyRole('admin','system:dept:list')")
    public String hello(){
        return "hello";
    }

标签:hasAuthority,跨域,校验,hello,权限,public
From: https://www.cnblogs.com/wsfj/p/17347539.html

相关文章

  • docker.sock 和 docker.socket 无操作权限的修复
     问题:第三软件jenkins等,甚至docker本身都有可能报如下无权限操作的错误:docker:GotpermissiondeniedwhiletryingtoconnecttotheDockerdaemonsocketatunix:///var/run/docker.sock:Posthttp://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create:dialuni......
  • 实现权限登录
    数据库校验用户​从之前的分析我们可以知道,我们可以自定义一个UserDetailsService,让SpringSecurity使用我们的UserDetailsService。我们自己的UserDetailsService可以从数据库中查询用户名和密码数据库CREATETABLE`sys_user`(`id`BIGINT(20)NOTNULLAUTO_INCRE......
  • 授权实现 封装权限信息
    限制访问资源所需权限​SpringSecurity为我们提供了基于注解的权限控制方案,这也是我们项目中主要采用的方式。我们可以使用注解去指定访问对应的资源所需的权限。​但是要使用它我们需要先开启相关配置我们前面在写UserDetailsServiceImpl的时候说过,在查询出用户后还要获取......
  • Nginx配置跨域,覆盖后端服务跨域配置
    本篇文章主要介绍了,如何通过Nginx配置跨域,并覆盖后端服务跨域配置。先看下后端代码跨域配置:主要的目标是:不修改后端跨域配置代码,来实现Nginx跨域指定域名。@BeanpublicCorsFiltercorsFilter(){finalUrlBasedCorsConfigurationSourceurlBasedCorsCon......
  • 如何校验K8S Yaml文件
    Kubernetes已经占据如何管理集容器化应用程序的核心位置。因此,存在许多定义Kubernetes应用程序的约定文件格式,包括YAML、JSON、INI等。这使得我们需要考虑应用程序的最佳策略是什么。此外,我们还必须考虑如何根据所选择的文件结构(特别是安全性)路径来验证应用程序配置。本文,我们将......
  • 从数据库查询权限信息、自定义失败处理
    从数据库查询权限信息我们只需要根据用户id去查询到其所对应的权限信息即可。所以我们可以先定义个mapper,其中提供一个方法可以根据userid查询权限信息。MenuMapper持久层接口publicinterfaceMenuMapperextendsBaseMapper<Menu>{List<String>selectPermsByUser......
  • Linux权限管理及用户与用户组
    摘要:第一部分:Linux权限管理一、基本权限linux权限机制采用UGO模式。其中u(user)表示所属用户、g(group)表示所属组、o(other)表示除了所属用户、所属组之外的情况。u、g、o都有读(read)、写(write)、执...第一部分:Linux权限管理一、基本权限    linux权限机制采用UGO模......
  • RBAC权限模型、建表及SQL语句编写
    RBAC权限模型RBAC权限模型(Role-BasedAccessControl)即:基于角色的权限控制。这是目前最常被开发者使用也是相对易用、通用权限模型。建表及SQL语句编写准备工作创建数据库SQL表CREATEDATABASE/*!32312IFNOTEXISTS*/`sg_security`/*!40100DEFAULTCHARACTERSETutf8......
  • Liunx配置sudo使oracle用户有root权限执行脚本
    1、vi/etc/sudoers将%wheel两行前的注释#删除2. vi/etc/group将oracle用户加入wheel组......
  • 设置权限所需资源、封装权限信息
    设置权限所需资源SpringSecurity为我们提供了基于注解的权限控制方案,这也是我们项目中主要采用的方式。我们可以使用注解去指定访问对应的资源所需的权限。但是要使用它我们需要先开启相关配置。@EnableGlobalMethodSecurity(prePostEnabled=true)在SecurityConfig配置类......