集成了spring Security的时候启动项目,如果没有设置默认的账号密码,系统会自动给你生成一个密码,默认用户为user
在postman中访问的时候只需要设置
这样就可以简单的访问接口并正确返回。
因为你没有设置密码,这样每次重启会给你一个随机新的密码,这样很不方便,那么我们可以在配置文件中定义固定的账号密码
当然也可以直接在java文件中定义账号密码,首先需要我们创建一个 Spring Security 的配置类,集成自 WebSecurityConfigurerAdapter 类,如下:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//下面这两行配置表示在内存中配置了两个用户
auth.inMemoryAuthentication()
.withUser("javaboy").roles("admin").password("$2a$10$OR3VSksVAmCzc.7WeaRPR.t0wyCsIj24k0Bne8iKWV1o.V9wsP8Xe")
.and()
.withUser("lisi").roles("user").password("$2a$10$p1H8iWa8I4.CA.7Z8bwLjes91ZpY.rYREGHQEInNtAp4NzL6PLKxi");
}
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
这里我们在 configure 方法中配置了两个用户,用户的密码都是加密之后的字符串(明文是 123),从 Spring5 开始,强制要求密码要加密,如果非不想加密,可以使用一个过期的 PasswordEncoder 的实例 NoOpPasswordEncoder,但是不建议这么做,毕竟不安全。
Spring Security 中提供了 BCryptPasswordEncoder 密码编码工具,可以非常方便的实现密码的加密加盐,相同明文加密出来的结果总是不同,这样就不需要用户去额外保存盐
的字段了,这一点比 Shiro 要方便很多。
2.系统虽然集成了SpringSecurity,但是我在测试的时候不想走过滤器链,那么可以在SecurityConfig设置忽略
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
//忽略权限授权接口
web.ignoring().antMatchers("自己填写路径");
}
}
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// 任意请求允许无授权访问
http.authorizeRequests()
.anyRequest().permitAll();
http.csrf().disable().exceptionHandling().authenticationEntryPoint(getAccessDeniedHandler());
}
}
本文来自:CSDN博客
感谢作者:CSDN博客
查看原文:集成SpringSecurity,访问接口报401 unauthorization无权限_springsecurity登录接口401_wang0112233的博客