我正在用Hibernate和SpringSecurity在SpringMVC4中做一个项目。在这个项目中,我有三个角色:<code>ROLE_USER
用户将像常规注册网站一样注册,但我对如何通过注册过程在数据库中保存新用户,如何保存Spring Security定义的新用户和数据库以及如何使用Hibernate获取该信息感到困惑。
谢谢。
您将拥有您的User
类,它实现了具有一个或多个权限的用户详细信息
。例如:
用户
@Entity
@Table(name = "User")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
private String username;
@NotNull
private String password;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.EAGER, orphanRemoval = true)
private Set<UserAuthority> authorities;
//helper method to set roles for this user
public void grantRole(UserRole role) {
if (authorities == null) {
authorities = new HashSet<UserAuthority>();
}
authorities.add(role.asAuthorityFor(this));
}
//overrides, getters, setters
}
用户权限
@Entity
@IdClass(UserAuthority.class)
public class UserAuthority implements GrantedAuthority {
@NotNull
@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
@Id
private User user;
@NotNull
@Id
private String authority;
//overrides, getters, setters
}
用户角色
public enum UserRole {
USER, COMPANY, ADMIN;
}
创建用户时只需:
User user = new User();
user.grantRole(UserRole.USER);
repository.save(user);
至于身份验证,您需要实现从存储库加载用户的用户详细信息服务
UserDetailsService实现
@Service
public class UserDetailsService implements org.springframework.security.core.userdetails.UserDetailsService {
@Autowired
private UserRepository repository;
private final AccountStatusUserDetailsChecker detailsChecker = new AccountStatusUserDetailsChecker();
@Override
public final User loadUserByUsername(String username) throws UsernameNotFoundException {
final User user = repository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User not found");
}
detailsChecker.check(user);
return user;
}
}
现在,在您安全配置中,您只需使用< code>UserDetailsService
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
@Override
protected UserDetailsService userDetailsService() {
return userDetailsService;
}
如何获取数据取决于您,我会使用Spring Data JPA来实现。
首先,请记住我是一个Java新手,这对我来说都是未探索的领域。 我遵循了一个指南(大约6个月前)来实现Spring Security性,但从未找到一个专门用于单独前端层的指南。 在实现令牌之前,每个步骤都有效,我得到了这个错误: 我在这里看到过其他类似的帖子,尽管它们讨论的内容不同 例如。 > 用户不能被强制转换为com.example.security.CustomUserDetailsSpri
当我使用security.basic.enabled=false在具有以下依赖项的Spring Boot项目上禁用安全性时: 为了修复此异常,我必须添加属性-management.security.enabled=false。我的理解是,当执行器在类路径中时,应该将security.basic.enabled=false和management.security.enabled=false设置为禁用
我遵循了spring boot安全教程,但最终结果有一个问题,即在成功登录后,浏览器重定向到。 我什至克隆了教程中引用的代码,认为我输入错误的内容,或者忘记添加组件或其他内容。不,同样的问题也存在。 在Stackoverflow上搜索时,我发现您需要在< code > WebSecurityConfigurerAdapter 的< code>configure方法中定义默认的成功URL,如下所示:
我正在使用带有java配置和两个HttpSecurity配置的spring-security 3.2.0.rc2。一个用于REST API,一个用于UI。当我发布到/logout时,它重定向到/login?logout,但随后(错误地)重定向到/login。当我成功地输入用户名和密码时,我会被重定向到登录-注销,并且必须再次输入凭据才能进入主页面。因此,似乎login的permitAll不被用于l
这是关于V.4(MVC+安全性)的。我实现了,其中在方法中向用户授予其权限。让我们简单地说: 还有一个安全控制器,其中有一个带有注释的带注释的方法: 正如您在方法中看到的,我显式地将角色授予了用户。但是,当我尝试访问时,我得到一个异常: 2016-04-19 10:25:16,899 DEBUG(http-nio-8080-exec-9)[org.springframework.security.
问题内容: 在我的Web应用程序中,当我尝试注销时,它转到而不是给定的页面。在我的页面中,我添加了 问题是,当我使用spring security 3.1.4.RELEASE 版本时,此问题较早 起作用 。现在我正在使用 3.2.2.RELEASE 我也尝试了以下方法。没工作 spring-security.xml 提前致谢。 问题答案: 启用Spring Security CSRF保护后,必