- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
截至Spring Security doc: 34.1 @EnableWebMvcSecurity状态,@EnableWebMvcSecurity
已替换为 @EnableWebSecurity
.
但是当我尝试获取 UserDetails
在 Controller 中由 @AuthenticationPrincipal
,我得到一个空对象:用户名是""
.我也试过@EnableWebMvcSecurity
, 但不幸的是 UserDetails
是 null
.
但我可以得到 UserDetails
通过传统方式,像这样:
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetails
的正确方法是什么? (
Account
) 当我使用
@EnableWebSecurity
?
@RequestMapping(method = RequestMethod.POST)
@Secured("ROLE_USER")
public String postRoom(@Valid @ModelAttribute Room room, BindingResult result, Model model, @AuthenticationPrincipal Account principal) {
if (result.hasErrors()) {
return "room_form";
}
Account account = accountRepository.findByUsername(principal.getUsername());
room.setAccountId(account.getId());
room.setLastModified(new Date());
roomRepository.save(room);
return "room_list";
}
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Autowired
private SecurityProperties security;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll()
.and().formLogin().loginPage("/login").failureUrl("/login?error").permitAll()
.and().logout().permitAll()
.and().rememberMe()
.and().csrf().disable();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(this.dataSource).passwordEncoder(new BCryptPasswordEncoder(8));
}
}
Account.java
:
@Entity
@Table(name = "users")
public class Account implements Serializable {
@Id
@GeneratedValue
private Long id;
private String username;
private String password;
private boolean enabled;
@Lob
private byte[] avatar;
// getter / setter ...
}
最佳答案
AuthenticationPrincipal is empty.
But I can get the UserDetails by the traditional way, like this:SecurityContextHolder.getContext().getAuthentication().getPrincipal();
argument-resolvers
帮了我
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="org.springframework.security.web.method.annotation.AuthenticationPrincipalArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
Once AuthenticationPrincipalArgumentResolver is properly configured, you can be entirely decoupled from Spring Security in your Spring MVC layer.
By using Section 34.1, “@EnableWebMvcSecurity” you will automatically have this added to your Spring MVC configuration
关于spring - 使用 EnableWebSecurity 时 AuthenticationPrincipal 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29657039/
我刚刚阅读了另一个问题的答案 What is the use of @EnableWebSecurity in Spring? ,但我完全不明白为什么我们需要添加 @EnableWebSecurity
我正在使用 Spring 4 开发 REST API。我想使用 Spring Security 保护一些端点,但根据我所读到的内容,这可以通过 @EnableGlobalMethodSecurity
我有 RESTful spring 资源服务器,带有 @EnableResourceServer 并扩展了 ResourceServerConfigurerAdapter 在documentation
@EnableWebSecurity JavaDoc 文档: Add this annotation to an @Configuration class to have the Spring Sec
截至Spring Security doc: 34.1 @EnableWebMvcSecurity状态,@EnableWebMvcSecurity已替换为 @EnableWebSecurity . 但
Spring boot 尝试查找 @EnableWebSecurity类,尽管它不包括在内。 我正在使用 @SpringApplication和 @EnableWebMvc一起。可能是问题吗? 这是堆
我无法在 Spring Security 3.1.3 中找到哪个包包含 @EnableWebSecurity。我已经添加了 core、config、web 和 ldap 安全包,但注释仍然不可用。是否
我无法在 Spring Security 3.1.3 中找到哪个包包含 @EnableWebSecurity。我已经添加了 core、config、web 和 ldap 安全包,但注释仍然不可用。是否
在使用 spring-boot-starter-security:1.3.3:RELEASE 使用简单的 Web 应用程序测试 Spring Boot (1.3.3) 时,我观察到以下行为: 为了覆盖
我必须在 Spring MVC 项目中启用 X-Frame-Options: SAMEORIGIN ,才能将此参数返回到 http 响应 header 。项目部署在Apache Tomcat 9上。
这是我花了几个小时尝试解决后无法弄清楚的问题。我正在研究带有java配置的spring security。我提出了以下异常,但不知道我应该做什么。 Oct 22, 2015 6:00:57 AM
我有一个使用 Spring Boot、Angular 2、Spring OAuth 2 的系统,我使用 @EnableWebSecurity 实现了安全性,并使用 @EnableResourceSer
我没有使用 Spring Boot,但我希望能够使用 YAML 打开/关闭调试,例如: debug: true 代替: @EnableWebSecurity(debug = true) 最佳答案 您可
我是一名优秀的程序员,十分优秀!