我试图在用户使用登录后从会话范围的bean中获取用户名 /users/login
我已经 Autowired
会话作用域bean到 RestController
在rest控制器的一个端点中,我调用了会话范围bean上的setter。但是对于来自同一会话的请求,setter的效果是不可见的。
以下是我的会话范围bean:
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
@Getter
@Setter
public class SessionSpecificUserDetails implements Serializable {
private String userName;
}
import lombok.Getter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.annotation.SessionScope;
@Getter
@Configuration
public class UserSessionDetailsConfiguration {
@Bean
@SessionScope
public SessionSpecificUserDetails sessionSpecificUserDetails() {
return new SessionSpecificUserDetails();
}
}
以下是 RestController
```
import com.course.backend.coursebackend.config.SessionSpecificUserDetails;
import com.course.backend.coursebackend.dao.User;
import com.course.backend.coursebackend.repository.UserRepository;
import com.course.backend.coursebackend.utils.ResponseUtils;
import com.course.backend.coursebackend.utils.UserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
UserRepository userRepository;
@Autowired
SessionSpecificUserDetails sessionSpecificUserDetails;
@GetMapping("/getLoggedInUser")
public String getLoggedInUser() {
return sessionSpecificUserDetails.getUserName();
}
@PostMapping("/login")
public ResponseUtils.CustomResponse login(@RequestBody User user) {
List<User> users = getAllUsers();
Optional<User> optionalUser = users.stream()
.filter(currentUser -> currentUser.getUserName().equals(user.getUserName()))
.findAny();
if (optionalUser.isEmpty()) {
return ResponseUtils.getErrorResponse(List.of("Username not found!"));
}
if (optionalUser.get().getPassword().equals(user.getPassword())) {
sessionSpecificUserDetails.setUserName(user.getUserName());
return ResponseUtils.getSuccessResponse("Login Successful!");
}
return ResponseUtils.getErrorResponse(List.of("Login failed due to wrong password!"));
}
}
我看到spring正在为会话范围的bean创建代理(可能是因为我的二传手即使在同一节课上也没有任何效果?)
我的问题是,在会话中使用会话作用域bean的正确方法是什么 `RestController` ? 在请求之间获取同一会话的用户名的好方法是什么?我试过做记号 `UserController` 也作为 `@SessionScope` 但这也不管用。
暂无答案!
目前还没有任何答案,快来回答吧!