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