欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微人事第十天:HttpSecurity配置

程序员文章站 2022-04-30 23:06:32
...

Spring Security可以针对不同的访问路径,来根据登陆的用户判断该用户是否可以访问。实现这个功能就需要HttpSecurity配置来解决。
1.配置类
以下配置类可以看出,这里提供了两个登陆的用户,用户javaboy具有admin权限,用户江南一点雨既有admin又有user权限。

接下来配置类中根据不同的访问权限来设定该用户是否能访问。
例如以下代码就表示以admin开头的路径只能admin权限能访问

.antMatchers("/admin/**").hasRole("admin")

user开头的路径admin和user权限都可以访问

 .antMatchers("user/**").hasAnyRole("admin","user")

以下表示剩余路径都可以访问,无论有什么权限

.anyRequest().authenticated()

这个是登陆路径,使用postman需要以下配置

loginProcessingUrl("/doLogin")

完整代码:

package org.javaboy.security.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    //告诉系统不加密
    @Bean
    PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("javaboy").password("123").roles("admin")
                .and()
                .withUser("江南一点雨").password("456").roles("user");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/admin/**").hasRole("admin")
                .antMatchers("user/**").hasAnyRole("admin","user")
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginProcessingUrl("/doLogin")
                .permitAll()
                .and()
                .csrf().disable();
    }
}

2.接口
这里针对不同路径,写出不同返回值

package org.javaboy.security.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController  {

    @GetMapping("/hello")
    public String hello() {
        return "hello security";
    }

    @GetMapping("/admin/hello")
    public String admin() {
        return "hello admin!";
    }

    @GetMapping("/user/hello")
    public String user() {
        return "hello user!";
    }
}

3.测试
先访问http://localhost:8080/hello界面,用javaboy登陆,返回hello界面
微人事第十天:HttpSecurity配置

现在访问http://localhost:8080/user/hello和http://localhost:8080/admin/hello都是可行的,因为javaboy具有admin权限,以上两天路径都可以访问。
微人事第十天:HttpSecurity配置
微人事第十天:HttpSecurity配置

现在情况缓存,使用“江南一点雨”访问admin前缀的路径就报403了:
微人事第十天:HttpSecurity配置

HttpSecurity的作用就是定义不同的路径都需要有响应的访问权限。

相关标签: 微人事课程