-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Integrate UserService for authentication and remove hardcoded sqls fr…
…om SecurityConfig
- Loading branch information
1 parent
376c2bc
commit e9bdc76
Showing
5 changed files
with
159 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package com.dev.springdemo.auth.role; | ||
|
||
import lombok.Data; | ||
import lombok.NoArgsConstructor; | ||
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.validation.constraints.NotNull; | ||
|
||
@Data | ||
@NoArgsConstructor | ||
@Entity | ||
@Table(name = "roles") | ||
public class Role implements GrantedAuthority { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private int id; | ||
|
||
@NotNull | ||
@Column(name = "role_name") | ||
private String name; | ||
|
||
@Override | ||
public String getAuthority() { | ||
return getName(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
package com.dev.springdemo.auth.user; | ||
|
||
import com.dev.springdemo.auth.role.Role; | ||
import com.fasterxml.jackson.annotation.JsonIgnore; | ||
import lombok.Data; | ||
import lombok.NoArgsConstructor; | ||
import org.springframework.security.core.GrantedAuthority; | ||
import org.springframework.security.core.userdetails.UserDetails; | ||
|
||
import javax.persistence.CascadeType; | ||
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.OneToMany; | ||
import javax.persistence.Table; | ||
import javax.validation.constraints.Email; | ||
import javax.validation.constraints.NotNull; | ||
import java.util.Collection; | ||
import java.util.Set; | ||
|
||
@Data | ||
@NoArgsConstructor | ||
@Entity | ||
@Table(name = "user_info") | ||
public class User implements UserDetails { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private int id; | ||
|
||
@NotNull | ||
@Column(name = "first_name") | ||
private String firstName; | ||
|
||
@NotNull | ||
@Column(name = "last_name") | ||
private String lastName; | ||
|
||
@NotNull | ||
@Column(name = "email_address") | ||
private String email; | ||
|
||
@NotNull | ||
@JsonIgnore | ||
private String password; | ||
|
||
@OneToMany(cascade= CascadeType.ALL, fetch = FetchType.EAGER) | ||
@JoinTable(name="user_roles", | ||
joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, | ||
inverseJoinColumns={@JoinColumn(name="role_id", referencedColumnName="id")}) | ||
private Set<Role> roles; | ||
|
||
@Override | ||
public Collection<? extends GrantedAuthority> getAuthorities() { | ||
return roles; | ||
} | ||
|
||
@Override | ||
public String getUsername() { | ||
return email; | ||
} | ||
|
||
@Override | ||
public boolean isAccountNonExpired() { | ||
return true; | ||
} | ||
|
||
@Override | ||
public boolean isAccountNonLocked() { | ||
return true; | ||
} | ||
|
||
@Override | ||
public boolean isCredentialsNonExpired() { | ||
return true; | ||
} | ||
|
||
@Override | ||
public boolean isEnabled() { | ||
return true; | ||
} | ||
} |
12 changes: 12 additions & 0 deletions
12
src/main/java/com/dev/springdemo/auth/user/UserRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package com.dev.springdemo.auth.user; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.stereotype.Repository; | ||
|
||
import java.util.Optional; | ||
|
||
@Repository | ||
public interface UserRepository extends JpaRepository<User, Integer> { | ||
|
||
Optional<User> findUserByEmail(String emailAddress); | ||
} |
23 changes: 23 additions & 0 deletions
23
src/main/java/com/dev/springdemo/auth/user/UserService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package com.dev.springdemo.auth.user; | ||
|
||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.security.core.userdetails.UserDetails; | ||
import org.springframework.security.core.userdetails.UserDetailsService; | ||
import org.springframework.security.core.userdetails.UsernameNotFoundException; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.Optional; | ||
|
||
@Service | ||
public class UserService implements UserDetailsService { | ||
|
||
@Autowired | ||
private UserRepository userRepository; | ||
|
||
|
||
@Override | ||
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { | ||
Optional<User> userByEmail = userRepository.findUserByEmail(username); | ||
return userByEmail.orElseThrow(() -> new UsernameNotFoundException("User not found.")); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters