forked from GlueCoders/springboot-guide
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[GlueCoders#14] Basic http auth for books resources. Added credential…
…s and members models, dao. Added registration module.
- Loading branch information
Anand Rajneesh
committed
Jul 2, 2017
1 parent
db4cc27
commit 479c972
Showing
23 changed files
with
883 additions
and
5 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
60 changes: 60 additions & 0 deletions
60
src/main/java/org/gluecoders/library/config/SpringSecurityAdapter.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,60 @@ | ||
package org.gluecoders.library.config; | ||
|
||
import org.gluecoders.library.security.PrincipalService; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.http.HttpMethod; | ||
import org.springframework.security.config.annotation.web.builders.HttpSecurity; | ||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; | ||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; | ||
import org.springframework.security.core.userdetails.User; | ||
import org.springframework.security.core.userdetails.UserDetailsService; | ||
import org.springframework.security.core.userdetails.UsernameNotFoundException; | ||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | ||
import org.springframework.security.crypto.password.PasswordEncoder; | ||
|
||
import javax.servlet.http.HttpServletResponse; | ||
import java.util.Optional; | ||
|
||
/** | ||
* Created by Anand_Rajneesh on 7/1/2017. | ||
*/ | ||
@EnableWebSecurity(debug = true) | ||
public class SpringSecurityAdapter extends WebSecurityConfigurerAdapter { | ||
|
||
@Autowired | ||
private PrincipalService principalService; | ||
|
||
@Override | ||
@Bean | ||
protected UserDetailsService userDetailsService() { | ||
return username -> Optional.ofNullable(principalService.findUser(username)) | ||
.map(credential -> User.withUsername(credential.getUsername()) | ||
.password(credential.getSaltedPwd()) | ||
.roles(credential.getRole()) | ||
.build()) | ||
.orElseThrow(() -> new UsernameNotFoundException(username + " not found")); | ||
} | ||
|
||
@Override | ||
protected void configure(HttpSecurity http) throws Exception { | ||
http | ||
.authorizeRequests() | ||
.mvcMatchers(HttpMethod.POST, "/unsecured/register").permitAll() | ||
.mvcMatchers(HttpMethod.GET, "/books").hasRole("USER") | ||
.mvcMatchers(HttpMethod.GET, "/books/*").hasRole("USER") | ||
.and() | ||
.httpBasic().and() | ||
.exceptionHandling() | ||
.authenticationEntryPoint((request, response, e) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED, e.getMessage())) | ||
.and() | ||
.csrf().disable() | ||
; | ||
} | ||
|
||
@Bean | ||
public PasswordEncoder passwordEncoder(){ | ||
return new BCryptPasswordEncoder(); | ||
} | ||
|
||
} |
14 changes: 14 additions & 0 deletions
14
src/main/java/org/gluecoders/library/dao/CredentialsDao.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,14 @@ | ||
package org.gluecoders.library.dao; | ||
|
||
import org.gluecoders.library.models.Credentials; | ||
import org.springframework.data.mongodb.repository.MongoRepository; | ||
import org.springframework.stereotype.Repository; | ||
|
||
/** | ||
* Created by Anand_Rajneesh on 7/1/2017. | ||
*/ | ||
@Repository | ||
public interface CredentialsDao extends MongoRepository<Credentials, String> { | ||
|
||
Credentials findDistinctByUsername(String username); | ||
} |
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 org.gluecoders.library.dao; | ||
|
||
import org.gluecoders.library.models.Member; | ||
import org.springframework.data.mongodb.repository.MongoRepository; | ||
import org.springframework.stereotype.Repository; | ||
|
||
/** | ||
* Created by Anand_Rajneesh on 7/1/2017. | ||
*/ | ||
@Repository | ||
public interface MemberDao extends MongoRepository<Member, String> { | ||
} |
12 changes: 12 additions & 0 deletions
12
src/main/java/org/gluecoders/library/exceptions/ResourceAlreadyExistsException.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 org.gluecoders.library.exceptions; | ||
|
||
/** | ||
* Created by Anand_Rajneesh on 7/1/2017. | ||
*/ | ||
public class ResourceAlreadyExistsException extends ResourceException { | ||
|
||
public ResourceAlreadyExistsException(String message) { | ||
super(message, StatusCode.CONFLICT); | ||
} | ||
|
||
} |
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
72 changes: 72 additions & 0 deletions
72
src/main/java/org/gluecoders/library/models/Credentials.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,72 @@ | ||
package org.gluecoders.library.models; | ||
|
||
import com.fasterxml.jackson.annotation.JsonIgnore; | ||
import net.sf.oval.constraint.NotEmpty; | ||
import net.sf.oval.constraint.NotNull; | ||
import org.springframework.data.annotation.Id; | ||
import org.springframework.data.annotation.Transient; | ||
import org.springframework.data.mongodb.core.mapping.Document; | ||
|
||
/** | ||
* Created by Anand_Rajneesh on 7/1/2017. | ||
*/ | ||
@Document(collection = "creds") | ||
public class Credentials { | ||
|
||
@Id | ||
@JsonIgnore | ||
private String id; | ||
@NotNull @NotEmpty | ||
private String username; | ||
@Transient @NotNull @NotEmpty | ||
private String pwd; | ||
@JsonIgnore | ||
private String role; | ||
@JsonIgnore | ||
private String saltedPwd; | ||
|
||
public String getUsername() { | ||
return username; | ||
} | ||
|
||
public void setUsername(String username) { | ||
this.username = username; | ||
} | ||
|
||
public String getPwd() { | ||
return pwd; | ||
} | ||
|
||
public void setPwd(String pwd) { | ||
this.pwd = pwd; | ||
} | ||
|
||
public String getSaltedPwd() { | ||
return saltedPwd; | ||
} | ||
|
||
public void setSaltedPwd(String saltedPwd) { | ||
this.saltedPwd = saltedPwd; | ||
} | ||
|
||
public String getId() { | ||
return id; | ||
} | ||
|
||
public void setId(String id) { | ||
this.id = id; | ||
} | ||
|
||
public String getRole() { | ||
return role; | ||
} | ||
|
||
public void setRole(String role) { | ||
this.role = role; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "{\"username\":\""+username+"\"}"; | ||
} | ||
} |
Oops, something went wrong.