带有身份验证的 Spring Boot 项目结构
Posted
技术标签:
【中文标题】带有身份验证的 Spring Boot 项目结构【英文标题】:Spring Boot project structure with Authentication 【发布时间】:2018-07-13 22:33:56 【问题描述】:我正在学习 Spring Boot 及其模块,但我想避免学习不好的做法。那么你能告诉我通常使用什么项目结构吗?
我正在使用这个结构:
com
+- example
+- myproject
+- Application.java
|
+- config
| +- CustomSecurityConfig.java (extends WebSecurityConfigurerAdapter)
|
+- domain
| +- Customer.java
|
+- repository
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
+- CustomerController.java
现在我需要实现 JWT 身份验证,所以我有了这些新类:
用于安全过滤器链的 CustomAuthFilter.java AuthenticationManager 的 CustomUserDetailsService.java CustomEntryPoint.java 用于处理异常 CustomJwtService.java 用于管理 jwt 令牌 CustomAuthController.java 用于其他端点,例如 /login、/logout、/create-user、/reset-password你能告诉我这些类在哪里存储吗?我有两个想法:
-
创建security文件夹并将其放在一起
像这样将文件拆分到现有文件夹中:CustomAuthFilter.java -> config、CustomUserDetailsService.java -> service、CustomEntryPoint.java -> config、CustomJwtService.java -> service、CustomAuthController.java -> web
你能给我一些建议吗?谢谢。
【问题讨论】:
【参考方案1】:这是代码组织问题,与 Spring Boot 无关。
模块的商业意义/功能比模块的技术意义。如果您稍后再看,功能感有助于轻松理解代码。
+Application.java
+security/
+-CustomAuth
+-CustomJwtSevice
如果功能分散在多个文件中,则将它们保存在子文件夹中,如上面的“security”。
+Application.java
+security/
+-auth/
+--token/
+---JWTtokenGenerator.java
+---JWTutil.java
+--configuration/
+---SecurityConfig
+---...
+--customer/
+---customerservice.java
+---customerrepo.java
上述模式的工作原理是将一个模块划分为子模块和子模块到它们的子模块..等等
【讨论】:
但我的项目只是一个小项目......建议项目结构更大,对吗?因此,如果我只想要一个模块,难道不是更适合我的目的吗? 是的!它通常用于大型应用项目。大型项目 -> 更大的隔离。小项目 -> 更小的隔离(更少的目录)。但思考过程是一样的。随着时间的推移,A File 分解为文件 -> 然后您需要将它们分组到包中。这是进化的过程。你应该始终保持即兴发挥的态度。但思考的过程保持不变。对于较小的项目,您可能需要较少数量的文件。我认为您不应该为每个文件创建目录。目录手段——功能组。以上是关于带有身份验证的 Spring Boot 项目结构的主要内容,如果未能解决你的问题,请参考以下文章
带有spring boot LDAP身份验证的Angular2
带有 Spring Security 的 Spring Boot - 使用 SMS/PIN/TOTP 的两因素身份验证
使用 Spring Boot/Spring Security 对 LDAP 进行证书身份验证