SpringSecurity静态资源放行,登陆页面配置,权限访问控制,自定义403

1:静态资源和无需权限页面放行

如果是static下的静态资源或者无需验证身份即可访问的页面,可以通过在SpringSecurity的配置类中配置放行:

 @Override
    protected void configure(HttpSecurity http) throws Exception {
				  http.authorizeRequests()
                //无需认证的为static下的静态资源,以及/index请求
                .antMatchers("/static/**","/index").permitAll()
                //其它所有请求都需要进行验证
                .anyRequest().authenticated();
    }

2:配置登录页面

自定义登陆页面,在控制器方法中写一个路径用来跳转到登陆页面,则可以在SpringSecurity配置类中配置登录页:

@Override
    protected void configure(HttpSecurity http) throws Exception {

        http.formLogin()
                //设置登录成功跳转
                .successForwardUrl("/success")
                //设置登录失败跳转
                .failureForwardUrl("/fail")
                //登录的url,默认为/login
                .loginProcessingUrl("/login")
                //自定义登录页
                .loginPage("请求登录页的url")
                .usernameParameter("表单中用户名的name属性值,默认为username")
                .passwordParameter("表单中密码的name属性值,默认为password");
    }

在执行登录的时候会走一个过滤器UsernamePasswordAuthenticationFilter: 里面默认的参数为username和password,可以通过usernameParameter和passwordParameter修改。

在这里插入图片描述

11:权限访问控制

方法解释
hasAuthority 方法如果当前的主体具有指定的权限,则返回 true,否则返回 false
hasAnyAuthority 方法如果当前的主体有任何提供的角色的话,返回true
hasRole方法如果当前主体具有指定的角色,则返回 true
hasAnyRole方法表示用户具备任何一个条件都可以访问

注意如果是hasRole方法判断权限:则在为用户设置权限时需要使用ROLE_作为前缀:

authorityList=AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_test")//添加的权限为test

而在配置文件中判断时无需添加ROLE_前缀:

antMatchers("/test").hasRole("test")//无需添加前缀

在hasRole方法底层定义了ROLE_前缀:
在这里插入图片描述

测试四个方法:

                .antMatchers("/authority").hasAuthority("admin")
                //admin common都可以访问
                .antMatchers("/anyAuthority").hasAnyAuthority("admin,common")
                //vip1才能访问
                .antMatchers("/role").hasRole("admin")
                //vip2,vip3访问
                .antMatchers("/anyRole").hasAnyRole("admin,common")

12:自定义403页面

如果当前主体没有访问此请求的权限,则会产生403错误,可以在SpringSecurity的配置文件中添加403页面配置:

 protected void configure(HttpSecurity http) throws Exception {
        //403页面,无权限跳转
        http.exceptionHandling().accessDeniedPage("/403");
 }

在控制器方法中添加跳转到无权限页面的方法:

@GetMapping("/403")
    @ResponseBody
    public String error(){
        return "这是403错误页面";
    }

配置权限:

   .antMatchers("/dbUser").hasAuthority("dbUser")
   .antMatchers("/test403").hasRole("test")

测试:登录用户权限为dbuser,访问test权限下的请求会跳转到403错误页面

在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security中,静态资源放行主要是通过配置来实现的。静态资源一般指的是网站中不需要经过安全验证的资源,比如CSS、JavaScript、图片等。 首先,我们需要创建一个配置类,继承自WebSecurityConfigurerAdapter,并重写configure方法。在configure方法中,我们可以通过调用WebSecurity的ignoring()方法来配置静态资源放行。 具体的配置方式有两种: 1. 通过antMatchers()方法指定要放行静态资源,可以使用通配符来匹配多个资源。例如: ``` @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/css/**", "/js/**", "/images/**"); } ``` 上述配置放行所有以/css/、/js/和/images/开头的静态资源。 2. 通过调用静态资源处理器的addResourceLocations()方法来指定静态资源的位置,如下所示: ``` @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/resources/**"); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**") .addResourceLocations("/resources/"); } ``` 上述配置放行所有位于/resources/目录下的静态资源。 需要注意的是,静态资源放行配置应该放在其他拦截规则之前,这样才能确保静态资源不会被认证过滤器拦截。 除了通过配置类来实现静态资源放行,我们还可以通过在WebSecurityConfig.xml中进行配置。具体的配置方式和上述相似,只是语法不同。 综上所述,通过合适的配置,我们可以在Spring Security中实现静态资源放行,确保网站的静态资源能够正常加载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值