Spring Security应用开发(12) 获取已登录用户信息

1.1. 获取已登录用户信息

在使用Spring Security的应用程序中,可以通过SecurityContext接口获取到已经登录的用户的信息。SecurityContext接口的实例通过SecurityContextHolder的静态方法getContext()获取。

通过SecurityContext可以获取到Authentication接口的实例,而通过Authentication接口可以获取到:

principal:主角,通常是一个UserDetails接口的实例,而默认就是User对象。

credentials:凭证,通常是密码。

authorities:用户拥有的角色列表。

details:WebAuthenticationDetails,包含IP地址和Session ID等信息。

一个典型的用于展示上述用户登录信息的代码如下:

@Controller

@RequestMapping("/home")

public class HomeController {

@RequestMapping("/")

public ModelAndView  index(){

ModelAndView  mv = new ModelAndView();

mv.addObject("message", "Hello,welcome!");

SecurityContext  sc = SecurityContextHolder.getContext();

mv.addObject("sc", sc);

Object principal = sc.getAuthentication().getPrincipal();

if(principal instanceof UserDetails){

UserDetails  userDetails = (UserDetails)principal;

mv.addObject("userDetails", userDetails);

for(GrantedAuthority authority :userDetails.getAuthorities()){

System.out.println(authority.getAuthority() +" , " + authority.getClass().getCanonicalName());

}

}

else {

String username = (String)principal.toString();

mv.addObject("username", username);

}

mv.setViewName("home/index");

return mv;

}

}

jsp页面如下:

<c:if test="${username!=null }">

<p>Username:${username}</p>

</c:if>

<p>

<br />SecurityContext: ${sc.getClass()}

<br />Authentication:  ${sc.authentication.getClass()}

<br />Credentials:     ${sc.authentication.credentials}

<br />Details:         ${sc.authentication.details}

</p>

<p>

<c:if test="${userDetails!=null }">

UserDetails: ${userDetails.getClass()}

<table>

<tr><td>username</td><td>${userDetails.username }</td></tr>

<tr><td>password</td><td>${userDetails.password }</td></tr>

</table>

Authorities:

${userDetails.authorities }

<ul>

<c:forEach    var="item" items="${userDetails.authorities}" varStatus="index" >

 <li>${index.index}/${index.count}:${item.authority},${item.getClass()}</li>

</c:forEach>

</ul>

</c:if>

运行结果如下:

SecurityContext: class org.springframework.security.core.context.SecurityContextImpl

Authentication: class org.springframework.security.authentication.UsernamePasswordAuthenticationToken

Credentials:

Details: org.sprin[email protected]b364: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: DE77CC038C592F5C301C605654436BEE

UserDetails: class org.springframework.security.core.userdetails.User

username zhangsan

password

Authorities: [ROLE_TEST, ROLE_TEST2, ROLE_USER]

0/1:ROLE_TEST,class org.springframework.security.core.authority.SimpleGrantedAuthority

1/2:ROLE_TEST2,class org.springframework.security.core.authority.SimpleGrantedAuthority

2/3:ROLE_USER,class org.springframework.security.core.authority.SimpleGrantedAuthority

时间: 2024-10-03 13:45:52

Spring Security应用开发(12) 获取已登录用户信息的相关文章

Spring Security 4 整合Hibernate 实现持久化登录验证(带源码)

上一篇文章:Spring Security 4 整合Hibernate Bcrypt密码加密(带源码) 原文地址:http://websystique.com/spring-security/spring-security-4-remember-me-example-with-hibernate/ [相关已翻译的本系列其他文章,点击分类里面的spring security 4] 本教程将使用Spring Security 4 和hibernate向你展示持久化登录验证. 在持久化登录验证中,应用

Spring Security整合JWT,实现单点登录,So Easy~!

前面整理过一篇 SpringBoot Security前后端分离,登录退出等返回json数据,也就是用Spring Security,基于SpringBoot2.1.4 RELEASE前后端分离的情况下,实现了登陆登出的功能,亮点就在于以JSON的形式接收返回参数.这个是针对单个后台服务的, 登录信息都存储在SecurityContextHolder缓存里.如果是两个或两个以上的应用呢,那该怎么办?Session是不能用了,Cookie自然也不能用,毕竟它俩是一对的. 曾想过用OAuth2来解决

获取当前登录用户的IP地址代码

1 *&---------------------------------------------------------------------* 2 *& Report YDEMO_RICK 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&-----------------------------------

C4C和CRM里获取当前登录用户分配的Organization Unit信息

C4C 如何查看某个用户分配的组织单元ID: 在Employee的Organization Data区域内看到分配的组织名称,如下图红色下划线所示: 现在的需求就是使用ABSL获取当前登录用户分配的Organization Unit信息,例如用WANGJERRY37登录,则取出下图显示的Department name PMLS: 具体实现:新建一个custom BO,使用字段DepartmentName存储这个待取的值: 然后创建AfterLoading script file,使用如下代码:

Linux用root强制踢掉已登录用户

首先使用w命令查看所有在线用户: [[email protected]_152_184_centos /]# w 20:50:14 up 9 days, 5:58, 3 users, load average: 0.21, 0.05, 0.02 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root pts/0 101.45.224.253 20:48 0.00s 0.00s 0.00s w root pts/1 101.45.224.2

利用Application对象存储登录用户信息

Application对象非常适合用于存储一些与整个应用相关数据,例如应用版本,应用登录账户,数据缓存等. 如activity的切换是很频繁的,差不多可以和一个网站中不同网页之间的切换一样,那么不同的activity之间需要存储公共信息(如只有一个当前登录用户)以及数据传递等. 利用Application对象存储登录用户信息的方法,可以很方便的不同activity之间获取登录用户信息. 首先,新建一个java类继承Application类:BaseApplication.java import

利用html5的本地存储功能实现登录用户信息保存

在HTML5中,本地存储是一个window的属性,包括localStorage和sessionStorage,从名字应该可以很清楚的辨认二者的区别,前者是一直存在本地的,后者只是伴随着session,窗口一旦关闭就没了.二者用法完全相同,这里以localStorage为例. 用户名.密码保存,自动登录等,可以通过设置cookie实现,第一次登录网站后在本地计算机的中写入cookie,之后再次登录此网站查看cookie中现有的值,用cookie值进行网站登录即可.但是 cookie 不适合大量数据

微信公众号基础02_获取accessToken和用户信息

上一篇分享了搭建微信公众号服务器,本文分享一下如果获取access_Token和用户信息,工具还是新浪云SAE 1.获取access_Token 相见开发文档:https://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html accesstoken是公众号的全局唯一票据,公众号调用各接口时都需使用accesstoken.开发者需要进行妥善保存.accesstoken的存储至少要保留512个字符空间.accesstoken

Linux 查看登录用户信息 who &amp; whoami

Linux 查看登录用户信息 who & whoami 在一台服务器上,同一时间往往会有很难多人同时登录. who 命令可以查看当前系统中有哪些人登录,以及他们都工作在哪个控制台上. 这样可以很方便的监控机器的登录人信息,并对系统操作进行安全监控. [[email protected] /]# who root pts/0 2019-11-21 23:10 (XX..) root pts/2 2019-11-18 11:39 (XX..) 效果如下: 有时候,可能会忘记自己是以什么身份登录到系统