Java spring mvc中不同类的角色
如果我有一个超类Java spring mvc中不同类的角色,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,如果我有一个超类用户,而类学生和讲师扩展了这个类,那么在springBoot应用程序中使用角色(即为了安全)的最佳方式是什么 我觉得这几乎没有必要,因为反正我有两个类?反正我会添加安全角色 处理每个请求时不必使用此类。而经过身份验证的用户将在会话令牌中“隐藏”其角色 我不确定您是否只能处理两个用户类的安全问题 那么没有经过身份验证的用户呢?无论如何,我都会添加安全角色 处理每个请求时不必使用此类。而经过身份验证的用户将在会话令牌中“隐藏”其角色 我不确定您是否只能处理两个用户类的安全问题 那么未
用户
,而类学生
和讲师
扩展了这个类,那么在springBoot
应用程序中使用角色(即为了安全)的最佳方式是什么
我觉得这几乎没有必要,因为反正我有两个类?反正我会添加安全角色 处理每个请求时不必使用此类。而经过身份验证的用户将在会话令牌中“隐藏”其角色 我不确定您是否只能处理两个用户类的安全问题
那么没有经过身份验证的用户呢?无论如何,我都会添加安全角色 处理每个请求时不必使用此类。而经过身份验证的用户将在会话令牌中“隐藏”其角色 我不确定您是否只能处理两个用户类的安全问题
那么未经身份验证的用户呢?使用类类型作为角色不是一个很好的主意,因为它不灵活。假设您创建了一个名为
学生的用户
,并将其保存到名为学生
的数据库表中。如果以后要将此用户的角色更改为讲师,则必须将所有用户数据迁移到新表中
我经常看到的一种常用方法是使用一个中间类(表),其中包含所有可用的角色。然后,每个用户都有一个角色列表(或只有一个角色)。通过这种方式,您可以轻松更改应用于不同用户的角色
例如,假设您有一个基本角色类:
class Role {
String name;
// Getters and setters...
}
然后,您的学生和讲师课程将如下所示:
abstract class User {
List<Role> roles;
// Easy way to check if a user has a role (better approach would be to use a Set).
boolean hasRole(String name) {
for (Role r : roles) {
if (name.equals(r.getName()))
return true
}
return false
}
}
class Lecturer extends User {
}
class Student extends User {
}
抽象类用户{
列出角色;
//检查用户是否有角色的简单方法(更好的方法是使用集合)。
布尔hasRole(字符串名称){
for(角色r:角色){
if(name.equals(r.getName()))
返回真值
}
返回错误
}
}
课堂讲师扩展用户{
}
班级学生扩展用户{
}
这种类型的角色结构有一个明显的好处——为数据库中的用户更改角色非常容易
您还可以创建多个小角色。例如,讲师
可以拥有角色读
,写
,创建
,等等,这将授予他对您的应用程序的所有权限。而学生可能只有read
角色
我还建议您检查是否计划对应用程序实施某种身份验证(它也遵循我所描述的类似角色方法)。使用类类型作为角色不是一个很好的主意,因为它不灵活。假设您创建了一个名为
学生的用户
,并将其保存到名为学生
的数据库表中。如果以后要将此用户的角色更改为讲师,则必须将所有用户数据迁移到新表中
我经常看到的一种常用方法是使用一个中间类(表),其中包含所有可用的角色。然后,每个用户都有一个角色列表(或只有一个角色)。通过这种方式,您可以轻松更改应用于不同用户的角色
例如,假设您有一个基本角色类:
class Role {
String name;
// Getters and setters...
}
然后,您的学生和讲师课程将如下所示:
abstract class User {
List<Role> roles;
// Easy way to check if a user has a role (better approach would be to use a Set).
boolean hasRole(String name) {
for (Role r : roles) {
if (name.equals(r.getName()))
return true
}
return false
}
}
class Lecturer extends User {
}
class Student extends User {
}
抽象类用户{
列出角色;
//检查用户是否有角色的简单方法(更好的方法是使用集合)。
布尔hasRole(字符串名称){
for(角色r:角色){
if(name.equals(r.getName()))
返回真值
}
返回错误
}
}
课堂讲师扩展用户{
}
班级学生扩展用户{
}
这种类型的角色结构有一个明显的好处——为数据库中的用户更改角色非常容易
您还可以创建多个小角色。例如,讲师
可以拥有角色读
,写
,创建
,等等,这将授予他对您的应用程序的所有权限。而学生可能只有read
角色
我还建议您检查是否计划对您的应用程序实施某种身份验证(它也遵循我所描述的类似的角色方法)。如果您想在
spring boot
应用程序中实现安全性,您可以使用spring securtiy
来处理角色并使您更轻松,您还可以创建自己的成功处理程序
和失败处理程序
类:
首先,在依赖项下的pom.xml
中添加这些行
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
在定义配置类和数据源之后,您需要定义\login
,因此您必须通过如下方式来解析路径
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class WebMVCconfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
}
}
viewName
是您要创建的自定义登录名,它必须位于src/main/resources/templates/
欲了解更多信息,请使用以下链接
,以及spring security官方文档如果您想在spring boot
应用程序中实现安全性,您可以使用spring securtiy
来处理角色并使其更简单,您还可以创建自己的成功处理程序
和失败处理程序
类:
首先,在依赖项下的pom.xml
中添加这些行
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
在定义配置类和数据源之后,您需要定义\login
,因此您必须通过如下方式来解析路径
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class WebMVCconfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
}
}
viewName
是您要创建的自定义登录名,它必须位于src/main/resources/templates/
欲了解更多信息,请使用以下链接
,以及spring安全官方文档