Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Mendapatkan Butiran Pengguna Aktif dalam Pengawal Spring?

DDD
Lepaskan: 2024-11-05 17:17:02
asal
600 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!