Rumah >Java >javaTutorial >Bagaimana untuk Mendapatkan Butiran Pengguna Aktif dalam Pengawal Spring?
Mendapatkan Butiran Pengguna Pengguna Aktif
Dalam pengawal Spring, mengakses butiran pengguna aktif (log masuk) biasanya melibatkan mendapatkan semula pelaksanaan UserDetails melalui SecurityContextHolder . Walau bagaimanapun, Spring menawarkan pendekatan alternatif untuk memudahkan proses ini.
Menggunakan @AuthenticationPrincipal
Dari Spring Security 3.2 dan seterusnya, anotasi @AuthenticationPrincipal menyediakan cara yang mudah untuk autowire UserDetails ke dalam pengawal atau kaedah. Dengan menganotasi parameter kaedah dengan @AuthenticationPrincipal, Spring secara automatik menyuntik objek Principal, yang mengandungi pelaksanaan UserDetails.
Contoh:
<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) { ... }</code>
Mendefinisikan a Penyelesai Argumen Tersuai (Pre-Spring 3.2)
Jika anda menggunakan versi Spring Security yang lebih awal atau memerlukan lebih kawalan, anda boleh melaksanakan WebArgumentResolver atau HandlerMethodArgumentResolver tersuai untuk mendapatkan semula objek Pengguna daripada Prinsipal .
Contoh (WebArgumentResolver):
<code class="java">public class CurrentUserWebArgumentResolver implements WebArgumentResolver { @Override public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest webRequest) { if (methodParameter.isParameterType(User.class) && methodParameter.hasParameterAnnotation(ActiveUser.class)) { Principal principal = webRequest.getUserPrincipal(); return (User) ((Authentication) principal).getPrincipal(); } else { return WebArgumentResolver.UNRESOLVED; } } }</code>
Spring 3.1 (HandlerMethodArgumentResolver):
<code class="java">public class CurrentUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { if (this.supportsParameter(methodParameter)) { Principal principal = webRequest.getUserPrincipal(); return (User) ((Authentication) principal).getPrincipal(); } else { return WebArgumentResolver.UNRESOLVED; } } }</code>
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Butiran Pengguna Aktif dalam Pengawal Spring?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!