我正在使用spring Boot编写web应用程序。它是基于jwt认证的,我有模型用户,老师,学生,课程。师生扩展用户
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
// Other fields and getters setters
}
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "teacher_id", nullable = false)
private Teacher teacher;
@ManyToMany(mappedBy = "enrolledCourses")
private Set<Student> students;
// Other fields and getters setters
}
@Entity
public class Teacher extends User{
@OneToMany(mappedBy = "teacher")
private Set<Course> courses;
// Other fields and getters setters
}
@Entity
public class Student extends User{
@ManyToMany
@JoinTable(
name = "course_student",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id"))
private Set<Course> enrolledCourses;
// Other fields and getters setters
}
而且我也有课程Api,我实现了post,put,delete,update和这些方法必须只有那些用户谁是教师可用。我的课程Api如下所示
@RestController
@RequestMapping("/teachers")
@PreAuthorize("hasRole('TEACHER')")
public class TeacherCourseController {
@GetMapping("/{teacherId}/courses")
public Set<Course> getCourse(@PathVariable("teacherId") Teacher teacher){
// code
}
@PostMapping("/{teacherId}/courses")
public Course createCourse(
@PathVariable("teacherId") Long teacherId,
@ModelAttribute CourseDto courseDto){
// code
}
@PutMapping("/{teacherId}/courses/{courseId}")
@JsonView(Views.IdName.class)
public Course updateCourse(
@ModelAttribute CourseDto courseDto,
@PathVariable("courseId") Course courseFromDb){
// code
}
@DeleteMapping("/{teacherId}/courses/{courseId}")
public void getCourse(@PathVariable("courseId") Course course) throws IOException {
// code
}
}
我的api url变得更糟,看起来像http://localhost:8080/teachers/{teacherId}/courses/{courseId}我如何检查是老师请求他的课程,而不是其他老师。谢谢
为什么不让课程成为顶级资源呢?您将有一个类似/courses{courseId}
的路径。在handler方法中,您检查来自对请求进行身份验证的JWT令牌的sub
声明。如果声明与授课教师的教师id不匹配,则返回403禁止
响应。
尽管课程是由老师教授的,但它们应该是自己的顶级资源,因为学生可能会列出它们并注册。
jwt不应该仅仅用于认证用户吗?我读到过可以在里面存储非敏感的东西,比如用户ID。将权限级别之类的东西存储在令牌中可以吗?这样我可以避免数据库调用。
但请求呢?和是用户的属性,但应将它们发送到endpoint。如果我将资源发送到endpoint,则没有多大意义。 对此有没有办法,遵循JSONAPI并保持API的意义?
我正在开发一个具有自己的身份验证和授权机制的REST应用程序。我想使用JSON Web Tokens进行身份验证。以下是有效且安全的实现吗? < li >将开发一个REST API来接受用户名和密码并进行认证。要使用的HTTP方法是POST,因此没有缓存。此外,在传输时还会有安全SSL < li >在认证时,将创建两个JWTs访问令牌和刷新令牌。刷新令牌将具有更长的有效期。这两个令牌都将写入coo
问题内容: 我需要使用PostForm方法将代理与auth一起使用。如果我使用类似(简体)的内容: 我可以轻松做到,并且效果很好。但是现在,我正在编辑第三方程序包,并尝试将代理添加到现有代码中: 在我看来,它是行不通的,而且失败了。在此示例中,没有身份验证的代理可以正常工作。有人知道吗,在这种情况下我可以在auth中使用代理吗? 问题答案: 您正在尝试向响应中添加标头,这不是您发送到服务器的内容,
假设我们有以下部分的web安全配置:
我有一个节点项目 我试过的密码- 运行此命令时,当secret_password错误时,它会正确显示,但当它正确时,它只显示一个单词swagger,表示swagger。io链接。 我搜索了一下,但是没有得到任何关于这个的信息或者例子。我错过了什么吗?
问题内容: 因此,我正在使用RESTeasy和Google App Engine开发REST Web服务。我的问题与GAE无关,但我提到它只是为了以防万一。碰巧的是,我自然需要保护自己的资源和我自己的用户(而不是Google的用户)。 REST Web服务的安全似乎是一个很有争议的主题,或者至少是一个非常“自由的”主题。REST对此没有施加任何标准。根据我在网络和文献上的研究,至少有3种方法适合我
我正在尝试使用urllib3连接到网页。代码如下所示。 如果我们假设url是需要使用用户名和密码进行身份验证的某个网页,那么我是否使用正确的代码进行身份验证? 我使用urllib2做这件事很舒服,但使用urllib3做不到同样的事情。 非常感谢