@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private Environment env;
@Autowired
private UserSecurityService userSecurityService;
private static final String[] PUBLIC_MATCHERS = {
"/webjars/**",
"/css/**",
"/js/**",
"/images/**",
"/",
"/about/**",
"/contact/**",
"/error/**/*",
"/h2-console/**"
};
@Override
protected void configure(HttpSecurity http) throws Exception {
List<String> activeProfiles = Arrays.asList(env.getActiveProfiles());
// Required by h2 console to work
if(activeProfiles.contains("dev")) {
http.csrf().disable();
http.headers().frameOptions().disable();
}
http
.authorizeRequests()
.antMatchers(PUBLIC_MATCHERS).permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").defaultSuccessUrl("/payload")
.failureUrl("/login?error").permitAll()
.and()
.logout().permitAll();
}
@Autowired
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userSecurityService);
}
}
spring.datasource.url=jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=
hibernate.dialect=org.hibernate.dialect.H2Dialect
调试O.S.S.W.A.I.FilterSecurityInterceptor-以前已通过身份验证:org.springframework.security.authentication.anonymousauthenticationtoken@2dafa81d:principal:anonymouser;全权证书:[受保护];已认证:真实;详细信息:org.springframework.security.web.authentication.webauthenticationdetails@2cd90:RemoteIpAddress:0:0:0:0:0:0:0:0:0:0:0:1;会话ID:0D60174BBA25377F65443D95DB72F713;授予的权限:ROLE_ANONYMOUS
DEBUG o.ss.access.vote.afirmativeBased-voter:org.springframework.security.web.access.expression.webexpressionvoter@7a27baf6,返回:1
调试O.S.S.W.A.I.FilterSecurityInterceptor-授权成功
调试o.security.web.filterchainproxy-/js/scripts.js已到达附加筛选器链的末端;按原始链进行
DEBUG o.ss.w.c.httpsessionSecurityContextrepository-SecurityContext为空或内容为匿名-context不会存储在HttpSession中。
调试O.S.S.W.A.ExceptionTranslationFilter-链已正常处理
DEBUG O.S.S.W.C.SecurityContextPersistenceFilter-SecurityContextThOlder现在已清除,因为请求处理已完成
在身份验证期间,应用程序抛出以下错误:
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
引发此异常,因为提供的(纯文本)密码缺少password-encoder{id}
-前缀。Spring Security 5现在使用以下格式存储密码(Spring Security以前的版本不是这样的):
{id}encodedPassword
这意味着对于纯文本口令,{noop}
id告诉spring使用noopPasswordEncoder
匹配口令(它基本上将口令作为纯文本处理)。
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
class Config {
@Bean
public PasswordEncoder passwordEncoder() {
// Create an encoder with strength 31
// values from 4 .. 31 are valid; the higher the value, the more work has to be done to calculate the hash
return new BCryptPasswordEncoder(12);
}
}
@Configuration
class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
PasswordEncoder passwordEncoder;
...
@Autowired
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userSecurityService)
.passwordEncoder(passwordEncoder);
}
}
密码编码
@Service
class UserService implements UserDetailsService {
private UserRepository userRepository;
private PasswordEncoder passwordEncoder;
UserService(UserRepository userRepository, PasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
User createUser(String username, String password) {
// encrypt the plain-text password
String encodedPassword = passwordEncoder.encode(password);
User user = new User(username, encodedPassword));
//...
return userRepository.save(user);
}
}
要支持多个编码器,可能需要查看DelegatingPasswordEncoder
和PasswordEncoderFactors
。
欲了解更多详细信息,请参阅https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released#password-storage-format
我们使用Spring Security OAuth2保护我们的REST服务(用于服务器到服务器通信,不涉及用户)。但是,当您尝试访问浏览器中的受保护资源时,它将显示: 我们希望这是我们自己选择的自定义页面。有办法吗? 设置“拒绝访问”页面不起作用。首先,它需要定义一个登录页面,我们没有,因为这是一个纯服务器到服务器的通信。另一个原因是,这个属性自Spring 3.0..或类似的版本以来就被弃用了。
在WAR的情况下,它试图将请求转发到/error页面,并寻找它的处理程序方法(请参见底部的日志)。 最后我得到以下回应: 我该换什么才能得到401?
问题内容: 我从Nexus存储库中检出了代码。我更改了帐户密码,并在文件中正确设置了密码。在执行时,我收到错误消息,说明它尝试从该存储库下载文件。 任何想法如何解决此错误?我在Maven 3.04中使用Windows 7 问题答案: 这里的问题是所使用的密码出现错字错误,由于密码中使用了字符/字母,因此很难识别。
我试图通过Java Apachebeam MongoDbIO连接器连接到MongoDB,得到一个“未授权”错误。 同样的连接细节也适用于Python并能够检索数据。 “org.apache.beam.sdk.io.mongodbo.mongodbio$boundedmongodbsource.$closeresource(Mongodbio.java:407)位于org.apache.beam.s
主要内容:1.入门,2.设置用户名和密码1.入门 1.启动一个SpringBoot项目 2.导入SpringSecurity相关依赖 3.编写Controller TestController.java 用户是user 密码是刚刚的 2.设置用户名和密码 1.在配置文件中设置 2.在配置类中设置 3.自定义实现类 2.1 配置文件中设置 2.2 在配置类中设置 设置用户名为zZZ,密码为root 2.3 自定义实现类 配置类: 业务类: