Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mendapatkan Butiran Pengguna Aktif dalam Pengawal Spring?

Bagaimana untuk Mendapatkan Butiran Pengguna Aktif dalam Pengawal Spring?

DDD
DDDasal
2024-11-05 17:17:02602semak imbas

How to Retrieve Active User Details in Spring Controllers?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn