【问题标题】:Spring-boot with spring secutiry error: There was an unexpected error (type=Forbidden, status=403)Spring-boot with spring security error:出现意外错误(type=Forbidden,status=403)
【发布时间】:2020-08-03 18:44:17
【问题描述】:

我目前正在通过 spring-boot 对我的小 API 实施安全性,作为学校的一个项目,当然没什么大不了的,但我想管理一些角色和东西。 我一直在尝试添加 .antMatchers(url).hasRole(someRole)。 ... 更多蚂蚁匹配器 ...
测试登录时实际上显示错误(type=Forbidden,status=403)。

这是一些代码

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception{
        auth.userDetailsService(userDetailsService);
    }


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/control").hasRole("ADMIN")
                .antMatchers("/", "/index","/img/*.jpg","/*.js","/*.css").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
            .permitAll();
}

@Bean 
public PasswordEncoder getPasswordEncoder(){
    return NoOpPasswordEncoder.getInstance();
}

只是一个控制器,它显示我的控制面板以 CRUD 我的动物:p

@Controller
@RequestMapping("/control")
public class AdminController {

    @Autowired
    private AnimalService animalService;

    @RequestMapping 
    public String getAnimals(Model model) { 

        List<Animal> animals = animalService.getAnimals();
        List<Animal> cats = new ArrayList<Animal>(); 
        List<Animal> dogs = new ArrayList<Animal>();
        List<Animal> bunnys = new ArrayList<Animal>();
        List<Animal> rats = new ArrayList<Animal>();

        animals.forEach(animal -> {

            animal.setStr(Base64.getEncoder().encodeToString(animal.getImg()));
            if (animal.getType().equals("cat")) {
                cats.add(animal);
            }
            if (animal.getType().equals("dog")) {
                dogs.add(animal);
            }
            if (animal.getType().equals("bunny")) {
                bunnys.add(animal);
            }
            if (animal.getType().equals("rat")) {
                rats.add(animal);
            }
        });
        model.addAttribute("cats", cats);
        model.addAttribute("dogs", dogs);
        model.addAttribute("bunnys", bunnys);
        model.addAttribute("rats", rats);
        return "control";
    }

}

我希望你们能帮助我,我是春天的新手。

【问题讨论】:

  • 你如何测试这个 /control 端点?
  • @pvpkiran 网络浏览器 -> localhost:port/control
  • 您必须先登录。要访问此 /control url,您必须在编码时使用具有 ADMIN 角色的登录用户。
  • 附带说明,我强烈建议您使用Map&lt;String, List&lt;Animal&gt;&gt; 而不是您的并行列表;它将使您的代码更简单、更可靠。此外,养成使用构造函数注入的习惯,而不是字段注入,这是现代最佳实践。

标签: java spring spring-boot spring-security


【解决方案1】:

DB tuple

Re: 就像在 de DB 中保存角色一样简单,如下所示: ROLE_roleNAME

【讨论】:

    猜你喜欢
    • 2021-02-26
    • 2020-04-05
    • 2023-03-26
    • 2016-03-11
    • 2020-05-30
    • 2015-09-19
    • 1970-01-01
    • 2017-11-11
    • 2021-03-11
    相关资源
    最近更新 更多