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!