Spring-Security获取登录用户信息的三种方式

获取当前登录用户信息的三种方式

方式1

在方法中获取Principal对象

package com.WSL.servlet;

import com.itheima.message.MessageConstant;
import com.itheima.result.Result;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RequestMapping("/user")
@RestController
public class UserServlet {
    @RequestMapping("/getUsername")
    public Result getUsername(){
        //获取到登录的用户名 这里的User对象是Spring-Security提供的User
        User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        if(user!=null){
            return new Result(true, MessageConstant.GET_USERNAME_SUCCESS,user.getUsername());
        }else {
            return new Result(false,MessageConstant.GET_USERNAME_FAIL);
        }
    }
}

Spring-Security获取登录用户信息的三种方式_第1张图片

方式2

在方式参数中直接注入Principal对象,调用getName的方法即可(注意包是java提供的对象)

import java.security.Principal;

import java.security.Principal;

@RequestMapping("/getUsername")
    public Result getUsername1(Principal principal){
        //获取到登录的用户名
        String name = principal.getName();
        if(name!=null){
            return new Result(true, MessageConstant.GET_USERNAME_SUCCESS,name);
        }else {
            return new Result(false,MessageConstant.GET_USERNAME_FAIL);
        }
    }

Spring-Security获取登录用户信息的三种方式_第2张图片

方式2

获取Authentication对象

@RequestMapping("/getUsername")
    public Result getUsername3(){
        //获取到登录的用户名
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        String name = authentication.getName();
        if(name!=null){
            return new Result(true, MessageConstant.GET_USERNAME_SUCCESS,name);
        }else {
            return new Result(false,MessageConstant.GET_USERNAME_FAIL);
        }
    }

Spring-Security获取登录用户信息的三种方式_第3张图片

你可能感兴趣的:(java,spring)