2017-01-08 13 views
5

Tôi có ví dụ mẫu này từ https://github.com/szerhusenBC/jwt-spring-security-demo/ mà tôi đang cố gắng sử dụng mongodb làm phụ trợ của tôi, nhưng tôi gặp lỗi vì mã trong JwtUserFactory.javaTôi có thể tham gia hai bộ sưu tập spring-data-mongdb như ManyToMany như thế nào (RDBMS)

return authorities.stream() 
       .map(authority -> new SimpleGrantedAuthority(authority.getName().name())) 
       .collect(Collectors.toList()); 

của nó vì lớp Authority & User trong model.security gói mà sử dụng RDBMS tham gia, nhưng tôi đang sử dụng MongoDB và nhận lỗi trong mã của tôi. Tôi có Authority & User được xác định cho Mongodb như dưới đây. bất cứ ai có thể hướng dẫn cho tôi để có được làm việc

Authority.java

@Document(collection = "authority") 
public class Authority { 

    @Id 
    private Long id; 

    private AuthorityName name; 

    @DBRef(lazy = true) 
    private List<User> users; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public AuthorityName getName() { 
     return name; 
    } 

    public void setName(AuthorityName name) { 
     this.name = name; 
    } 

    public List<User> getUsers() { 
     return users; 
    } 

    public void setUsers(List<User> users) { 
     this.users = users; 
    } 
} 

User.java

@Document(collection = "user") 
public class User { 

    @Id 
    private Long _id; 

    private String username; 

    private String password; 

    private String firstname; 

    private String lastname; 

    private String email; 

    private Boolean enabled; 

    private Date lastPasswordResetDate; 

    @DBRef(lazy = true) 
    private List<Authority> authorities; 

    public Long getId() { 
     return _id; 
    } 

    public void setId(Long id) { 
     _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 String getFirstname() { 
     return firstname; 
    } 

    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 

    public String getLastname() { 
     return lastname; 
    } 

    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public Boolean getEnabled() { 
     return enabled; 
    } 

    public void setEnabled(Boolean enabled) { 
     this.enabled = enabled; 
    } 

    public List<Authority> getAuthorities() { 
     return authorities; 
    } 

    public void setAuthorities(List<Authority> authorities) { 
     this.authorities = authorities; 
    } 

    public Date getLastPasswordResetDate() { 
     return lastPasswordResetDate; 
    } 

    public void setLastPasswordResetDate(Date lastPasswordResetDate) { 
     this.lastPasswordResetDate = lastPasswordResetDate; 
    } 
} 

UserRepository.java

public interface UserRepository extends MongoRepository<User, Double> { 
    User findByUsername(String username); 
} 

Exception

Dưới đây là ngoại lệ tôi nhận được

org.springframework.security.authentication.InternalAuthenticationServiceException: null 
    at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:126) ~[spring-security-core-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:144) ~[spring-security-core-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:174) ~[spring-security-core-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.parkcity.security.controller.AuthenticationRestController.createAuthenticationToken(AuthenticationRestController.java:44) ~[classes/:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_111] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_111] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_111] 
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_111] 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) ~[tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) ~[tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) ~[spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) ~[spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) ~[spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.parkcity.security.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:58) [classes/:na] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) [spring-security-web-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_111] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_111] 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.6.jar:8.5.6] 
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111] 
Caused by: java.lang.NullPointerException: null 
    at org.parkcity.security.JwtUserFactory.mapToGrantedAuthorities(JwtUserFactory.java:31) ~[classes/:na] 
    at org.parkcity.security.JwtUserFactory.create(JwtUserFactory.java:24) ~[classes/:na] 
    at org.parkcity.security.service.JwtUserDetailsServiceImpl.loadUserByUsername(JwtUserDetailsServiceImpl.java:25) ~[classes/:na] 
    at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:114) ~[spring-security-core-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    ... 93 common frames omitted 

2017-01-13 00:04:11.543 DEBUG 30067 --- [nio-8080-exec-1] o.s.s.w.a.ExceptionTranslationFilter  : Calling Authentication entry point. 
2017-01-13 00:04:11.544 DEBUG 30067 --- [nio-8080-exec-1] o.s.s.w.header.writers.HstsHeaderWriter : Not injecting HSTS header since it did not match the requestMatcher org.springframework.se[email protected]12337118 
2017-01-13 00:04:11.544 DEBUG 30067 --- [nio-8080-exec-1] s.s.w.c.SecurityContextPersistenceFilter : SecurityContextHolder now cleared, as request processing completed 
+0

Bạn gặp phải lỗi gì? Mã bạn có không giống như sẽ tham gia vào bất kỳ bộ sưu tập nào. – Veeram

+0

@SagarReddy Vui lòng xem cập nhật – user525146

Trả lời

5

Về cơ bản bạn có nhiều thì một vấn đề duy nhất với mã của bạn. Trước hết dự án mà bạn đang đề cập được tạo dựa trên JPA (đó là cơ sở dữ liệu quan hệ) và nếu bạn muốn sử dụng cùng một cơ sở mã với Mongo DB (kho tài liệu) ít nhất bạn cần phải suy nghĩ lại mô hình dữ liệu (Người dùng và Thẩm quyền). Nhưng lúc đầu, hãy thử làm ví dụ này và cuối cùng tôi chỉ khuyên những gì có thể thay đổi.

Trước hết nếu bạn đang sử dụng MongoDb để có trải nghiệm tốt nhất, đối tượng miền phải có loại Chuỗi, vì bạn biết mongodb lưu trữ id là ObjectId loại bson không thể chuyển đổi thành Long. Vì vậy, lúc đầu thay đổi User.java vào

@Document(collection = "user") 
public class User { 

    @Id 
    private String _id; 

    // bla bla bla 
} 

Cùng với Authority đối tượng

@Document(collection = "authority") 
public class Authority { 

    @Id 
    private String _id; 

    // TODO remove this right now !!! :) 
    @DBRef(lazy = true) 
    private List<User> users; 

    // bla bla bla 
} 

Và UserRepository

public interface UserRepository extends MongoRepository<User, String> { 
    User findByUsername(String username); 
} 

Sau hai sự thay đổi này, bạn sẽ cần phải cấu trúc lại các tài liệu tham khảo là tốt.

Bạn có tham chiếu từ Nhà chức trách cho người dùng? !!! Cái gì thế? :) Đó là một cái gì đó từ JPA, với MongoDb tham chiếu này không có ý nghĩa. Chỉ cần loại bỏ nó !! Điều tiếp theo với dự án là nó dựa trên thực tế là kho dữ liệu có một số dữ liệu được xác định trước xem import.sql, vì vậy tương tự cho MongoDb bạn cần phải nhập dữ liệu vào mongodb để có thể chạy dự án. Tôi đã chuyển đổi import.sql thành định dạng MongoShell để bạn có thể sử dụng nó.

Phụ trang này vào authority bộ sưu tập:

{ 
    "_id" : ObjectId("587cb19d1db2732183afb0a9"), 
    "_class" : "org.parkcity.model.security.Authority", 
    "name" : "ROLE_ADMIN" 
} 
{ 
    "_id" : ObjectId("587cb19d1db2732183afb0aa"), 
    "_class" : "org.parkcity.model.security.Authority", 
    "name" : "ROLE_USER" 
} 

Phụ trang này vào user bộ sưu tập:

{ 
    "_id" : ObjectId("587cb19d1db2732183afb0ab"), 
    "_class" : "org.parkcity.model.security.User", 
    "username" : "admin", 
    "password" : "$2a$08$lDnHPz7eUkSi6ao14Twuau08mzhWrL4kyZGGU5xfiGALO/Vxd5DOi", 
    "firstname" : "admin", 
    "lastname" : "admin", 
    "email" : "[email protected]", 
    "enabled" : true, 
    "lastPasswordResetDate" : ISODate("2017-01-16T11:42:21.537+0000"), 
    "authorities" : [ 
     DBRef("authority", ObjectId("587cb19d1db2732183afb0a9")), 
     DBRef("authority", ObjectId("587cb19d1db2732183afb0aa")) 
    ] 
} 
{ 
    "_id" : ObjectId("587cb1a11db2732183afb0ac"), 
    "_class" : "org.parkcity.model.security.User", 
    "username" : "user", 
    "password" : "$2a$08$UkVvwpULis18S19S5pZFn.YHPZt3oaqHZnDwqbCW9pft6uFtkXKDC", 
    "firstname" : "user", 
    "lastname" : "user", 
    "email" : "[email protected]", 
    "enabled" : true, 
    "lastPasswordResetDate" : ISODate("2017-01-16T11:42:21.620+0000"), 
    "authorities" : [ 
     DBRef("authority", ObjectId("587cb19d1db2732183afb0aa")) 
    ] 
} 

Như bạn có thể thấy tôi đã điều chỉnh các gói từ "org.zerhusen" vào "org.parkcity ".

Thats it, bây giờ bạn có thể bắt đầu dự án và có một số xét nghiệm. Như bạn có thể thấy tôi chưa thêm người dùng bị vô hiệu hóa (do đó bạn có thể làm điều đó bằng cách của riêng bạn).

Và chỉ để cân nhắc cho trường hợp cụ thể này sử dụng @DBRefs là tà ác thuần túy :) Bạn đang ở trên MogoDb để lưu trữ các nhà chức trách trong cùng một bộ sưu tập và đối tượng với người dùng, theo cách đó sẽ nhanh hơn nhiều.

Cũng tạo ra một ngã ba đầy đủ chức năng (dựa trên MongoDB) trong đó có sẵn ở đâyhttps://github.com/babltiga/jwt-spring-security-demo

+0

Cảm ơn bạn rất nhiều vì câu trả lời. Nó hoạt động như một say mê. Tôi đang lập kế hoạch để chuyển đổi mã này thành kiến ​​trúc Microservice. Bạn có bất cứ gợi ý hay ý tưởng nào về dự án hiện tại có thể được sử dụng cho microservices không? – user525146

+0

Tôi sẽ nói bạn cần một dịch vụ vi mô để xác thực, đó là một dịch vụ duy nhất sẽ chỉ nhận cặp tên người dùng/mật khẩu và trả lại mã thông báo JWT. Đối với trường hợp cụ thể đó, bạn thậm chí không cần bảo mật mùa xuân. Và đối với tất cả các dịch vụ vi mô khác, bạn sẽ cần Spring Security để đảm bảo rằng các thẻ JWT hợp lệ và người dùng đó được phép truy cập dịch vụ. Một cái gì đó như thế này .... :) – Babl

1

MongoDB là lưu trữ tài liệu dựa trên đòi hỏi một mô hình ý thức khác với bạn quen với việc trong SQL.

Trong trường hợp trên, vì Authority là một đối tượng nhỏ như vậy, tôi muốn chỉ bao gồm một

List<String> authorities 

trong Bảng điều khiển. Sau đó, bạn có một bộ sưu tập duy nhất mà không có tất cả các cruft có liên quan đến việc phải giữ tính toàn vẹn tham chiếu và cũng tăng hiệu suất. Nhược điểm là khi thay đổi quyền, cụ thể là, khi đổi tên hoặc xóa, bạn sẽ cần phải cập nhật tất cả tài liệu người dùng, nhưng đánh giá mô hình dữ liệu của bạn, điều đó sẽ không xảy ra quá thường xuyên.

Các vấn đề liên quan