From 1e4d46c9a29765ce7375c74d20136e06a8ad24c7 Mon Sep 17 00:00:00 2001 From: Vitaliy Fedoriv <vitaliy.fedoriv@gmail.com> Date: Wed, 23 May 2018 11:07:25 +0300 Subject: [PATCH] add security model extension --- .../petclinic/model/security/Authority.java | 72 ++++++++ .../petclinic/model/security/User.java | 159 ++++++++++++++++++ 2 files changed, 231 insertions(+) create mode 100644 src/main/java/org/springframework/samples/petclinic/model/security/Authority.java create mode 100644 src/main/java/org/springframework/samples/petclinic/model/security/User.java diff --git a/src/main/java/org/springframework/samples/petclinic/model/security/Authority.java b/src/main/java/org/springframework/samples/petclinic/model/security/Authority.java new file mode 100644 index 00000000..5224cdfe --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/model/security/Authority.java @@ -0,0 +1,72 @@ +package org.springframework.samples.petclinic.model.security; + +import org.springframework.security.core.GrantedAuthority; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +@Entity +@Table(name = "AUTHORITY", uniqueConstraints = { @UniqueConstraint(columnNames = { "NAME" }) }) + +public class Authority implements GrantedAuthority { + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + + @Column(name = "NAME") + private String name; + + @Override + public String getAuthority() { + return getName(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Authority other = (Authority) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/model/security/User.java b/src/main/java/org/springframework/samples/petclinic/model/security/User.java new file mode 100644 index 00000000..e74899a3 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/model/security/User.java @@ -0,0 +1,159 @@ +package org.springframework.samples.petclinic.model.security; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import org.springframework.security.core.userdetails.UserDetails; + +import java.io.Serializable; +import java.util.Collection; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.OrderBy; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +@Entity +@Table(name = "USER_", uniqueConstraints = { @UniqueConstraint(columnNames = { "USER_NAME" }) }) +public class User implements UserDetails, Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + + @Column(name = "USER_NAME") + private String username; + + @Column(name = "PASSWORD") + private String password; + + @Column(name = "ACCOUNT_EXPIRED") + private boolean accountExpired; + + @Column(name = "ACCOUNT_LOCKED") + private boolean accountLocked; + + @Column(name = "CREDENTIALS_EXPIRED") + private boolean credentialsExpired; + + @Column(name = "ENABLED") + private boolean enabled; + + @ManyToMany(fetch = FetchType.LAZY) + @JoinTable(name = "USERS_AUTHORITIES", joinColumns = @JoinColumn(name = "USER_ID", referencedColumnName = "ID"), inverseJoinColumns = @JoinColumn(name = "AUTHORITY_ID", referencedColumnName = "ID")) + @OrderBy + @JsonIgnore + private Collection<Authority> authorities; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public boolean isAccountExpired() { + return accountExpired; + } + + public void setAccountExpired(boolean accountExpired) { + this.accountExpired = accountExpired; + } + + public boolean isAccountLocked() { + return accountLocked; + } + + public void setAccountLocked(boolean accountLocked) { + this.accountLocked = accountLocked; + } + + public boolean isCredentialsExpired() { + return credentialsExpired; + } + + public void setCredentialsExpired(boolean credentialsExpired) { + this.credentialsExpired = credentialsExpired; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public Collection<Authority> getAuthorities() { + return authorities; + } + + public void setAuthorities(Collection<Authority> authorities) { + this.authorities = authorities; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + User other = (User) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + + @Override + public boolean isAccountNonExpired() { + return !isAccountExpired(); + } + + @Override + public boolean isAccountNonLocked() { + return !isAccountLocked(); + } + + @Override + public boolean isCredentialsNonExpired() { + return !isCredentialsExpired(); + } +} -- GitLab