获取当前登录用户信息的三种方式
方式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);
}
}
}
方式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);
}
}
方式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);
}
}