Java tutorial
/* * * * Copyright 2015-2016 the original author or authors. * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * */ package com.yqboots.security.core; import org.apache.commons.lang3.builder.ToStringBuilder; import org.hibernate.annotations.NaturalId; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.data.jpa.domain.AbstractPersistable; import org.springframework.security.core.CredentialsContainer; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import javax.persistence.*; import java.util.Collection; import java.util.Set; /** * User entity. * * @author Eric H B Zhan * @since 1.1.0 */ @SuppressWarnings("serial") @Entity @Table(name = "SEC_USER", uniqueConstraints = { @UniqueConstraint(name = "UN_USER_USERNAME", columnNames = { "USERNAME" }) }) public class User extends AbstractPersistable<Long> implements UserDetails, CredentialsContainer { @NotEmpty @Length(max = 64) @Column(unique = true, length = 64, nullable = false) @NaturalId private String username; @NotEmpty @Length(max = 128) @Column(length = 128, nullable = false) private String password; @Column(nullable = false) private boolean enabled = true; @ManyToMany(targetEntity = Role.class) @JoinTable(name = "SEC_USER_ROLES", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID")) private Set<Role> roles; @ManyToMany(targetEntity = Group.class) @JoinTable(name = "SEC_USER_GROUPS", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "GROUP_ID")) private Set<Group> groups; public User() { super(); } public User(String username, String password, Set<Role> roles) { this.username = username; this.password = password; this.roles = roles; } public User(Long id, String username, String password, boolean enabled, Set<Role> roles) { super(); this.setId(id); this.username = username; this.password = password; this.enabled = enabled; this.roles = roles; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public Collection<? extends GrantedAuthority> getAuthorities() { return this.roles; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public Set<Role> getRoles() { return roles; } public void setRoles(Set<Role> roles) { this.roles = roles; } public Set<Group> getGroups() { return groups; } public void setGroups(Set<Group> groups) { this.groups = groups; } @Override public void eraseCredentials() { this.password = null; } @Override public String toString() { return new ToStringBuilder(this).append("username", username).append("enabled", enabled) .append("roles", roles).append("groups", groups).toString(); } }