Я немного поиграл с пружинным безопасным методом и получил очень странное поведение.У меня есть несколько классов контроллеров, и методы помечены @PreAuthorize, чтобы ограничить доступ для определенных пользовательских ролей.
Существует один класс контроллеров, для которого введенные объекты становятся пустыми после добавления защиты метода.Я отладил в своем коде и обнаружил следующее:
service и userService являются внедренными объектами
@Controller
public class OrderController {
@Autowired
private OrderService service;
@Autowired
private UserService userService;
Что мне кажется странным, так это описание значения this : OrderController $$ EnhancerBySpringCGLIB $$ 1a7122f6.Удаляя все аннотации MethodSecurity, класс работает, как и ожидалось.
Когда я смотрю на другие классы контроллеров, которые также используют безопасность методов, они работают нормально, а список переменных в отладчике выглядит нормально:
@Controller
public class UserController {
@Autowired
private UserService service;
Я также искал ошибки, которые мог сделать с аннотациями, но аннотации в OrderController выглядят так же, как и в других классах Controller.Вот примеры класса OrderController:
@Controller
public class OrderController {
.
.
.
@GetMapping("/dispo/dispo")
@PreAuthorize("hasAuthority('ADMIN') or hasAuthority('DISPATCH')")
private String showDispoPage() {
return "/dispo/dispo";
}
@GetMapping("/dispo/orderCreate")
@PreAuthorize("hasAuthority('ADMIN') or hasAuthority('AL_SYNC_ADMIN') or hasAuthority('CLIENT_USER') or hasAuthority('DISPATCH')")
private String showCreateOrder(Model model) {
List<MdUser> userList = service.getUsers();
model.addAttribute("userList", userList);
return "/dispo/orderCreate";
}
}
А вот пример другого класса контроллера, который работает, как и ожидалось:
@Controller
public class UserController {
.
.
.
@GetMapping("/admin/user")
@PreAuthorize("hasAuthority('ADMIN') or hasAuthority('DISPATCH') or hasAuthority('WEBTOOL_USER')")
public String showInvalidUserPage(Model model) {
List<UserModel> invalidUserList = service.findInvalidUsers(service.getUsers());
model.addAttribute("userList", invalidUserList);
return "/admin/user";
}
@GetMapping("/admin/userCreate")
@PreAuthorize("hasAuthority('ADMIN')")
public String showNewUserPage(Model model) {
UserModel user = new UserModel();
model.addAttribute("user", user);
return "/admin/userCreate";
}
}
Так что здесь может пойти не так?Я не понимаю, почему этот один класс ведет себя иначе, чем другие классы.