`
healthandbeauty
  • 浏览: 168134 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Spring Security 取Session中的值和修改userDetails(转)

阅读更多
1.在session中取得spring security的登录用户名如下

${session.SPRING_SECURITY_CONTEXT.authentication.principal.username}

spring security 把SPRING_SECURITY_CONTEXT 放入了session 没有直接把username 放进去。

下面一段代码主要描述的是session中的存的变量

view plaincopy to clipboardprint?
存跳转时候的URL  
session {SPRING_SECURITY_SAVED_REQUEST_KEY=SavedRequest[http://localhost:8080/AVerPortal/resourceAction/resourceIndex.action]}  
 
存的是登录成功时候session中存的信息  
session {SPRING_SECURITY_CONTEXT=org.springframework.security.context.SecurityContextImpl@87b16984: Authentication: org.springframework.security.providers.cas.CasAuthenticationToken@87b16984: Principal: com.avi.casExtends.UserInfo@ff631d80: Username: test; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; Password: [PROTECTED]; Authenticated: true; Details: org.springframework.security.ui.WebAuthenticationDetails@12afc: RemoteIpAddress: 127.0.0.1; SessionId: AE56E8925195DFF4C50ABD384574CCEA; Granted Authorities: ROLE_ADMIN Assertion: org.jasig.cas.client.validation.AssertionImpl@661a11 Credentials (Service/Proxy Ticket): ST-3-1lX3acgZ6HNgmhvjXuxB-cas, userId=2, userName=test} 
存跳转时候的URL
session {SPRING_SECURITY_SAVED_REQUEST_KEY=SavedRequest[http://localhost:8080/AVerPortal/resourceAction/resourceIndex.action]}

存的是登录成功时候session中存的信息
session {SPRING_SECURITY_CONTEXT=org.springframework.security.context.SecurityContextImpl@87b16984: Authentication: org.springframework.security.providers.cas.CasAuthenticationToken@87b16984: Principal: com.avi.casExtends.UserInfo@ff631d80: Username: test; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; Password: [PROTECTED]; Authenticated: true; Details: org.springframework.security.ui.WebAuthenticationDetails@12afc: RemoteIpAddress: 127.0.0.1; SessionId: AE56E8925195DFF4C50ABD384574CCEA; Granted Authorities: ROLE_ADMIN Assertion: org.jasig.cas.client.validation.AssertionImpl@661a11 Credentials (Service/Proxy Ticket): ST-3-1lX3acgZ6HNgmhvjXuxB-cas, userId=2, userName=test}

2.在页面端用tag获取

<%@ taglib prefix='security' uri='http://www.springframework.org/security/tags'%> 

<security:authentication property="principal.username"></security:authentication> 

或者


<security:authorize ifAllGranted="ROLE_ADMIN">

 <security:authentication property="principal.username"></security:authentication> 

</security:authorize>


或者取session中的值

#session.SPRING_SECURITY_CONTEXT.authentication.principal.username等同于

3.在后台获取

UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext()
    .getAuthentication()
    .getPrincipal();


userDetails.getUsername()


想要获取更多的信息得扩展userDetails的默认实现类user类和UserDetailsService接口

由于springsecurity是把整个user信息放入session中的即:session.SPRING_SECURITY_CONTEXT.authentication.principal

这个就是代表着user对象

因此我做了扩展增加user里的信息 加上userId

代码如下:扩展user

 expand sourceview plaincopy to clipboardprint?
package com.avi.casExtends;   
  
import org.springframework.security.GrantedAuthority;   
import org.springframework.security.userdetails.User;   
  
public class UserInfo extends User{   
    private static final long serialVersionUID = 1L;   
  
    private String userId;   
  
    @SuppressWarnings("deprecation")   
    public UserInfo(String username, String password, boolean enabled, GrantedAuthority[] authorities)   
        throws IllegalArgumentException {   
        super(username,password, enabled, authorities);   
    }   
  
    public String getUserId() {   
        return userId;   
    }   
  
    public void setUserId(String userId) {   
        this.userId = userId;   
    }   
  
    public static long getSerialVersionUID() {   
        return serialVersionUID;   
    }   
  
     
}  
package com.avi.casExtends;

import org.springframework.security.GrantedAuthority;
import org.springframework.security.userdetails.User;

public class UserInfo extends User{
 private static final long serialVersionUID = 1L;

    private String userId;

    @SuppressWarnings("deprecation")
 public UserInfo(String username, String password, boolean enabled, GrantedAuthority[] authorities)
        throws IllegalArgumentException {
        super(username,password, enabled, authorities);
    }

 public String getUserId() {
  return userId;
 }

 public void setUserId(String userId) {
  this.userId = userId;
 }

 public static long getSerialVersionUID() {
  return serialVersionUID;
 }

  
}
 

实现userDetailsservice接口

+ expand sourceview plaincopy to clipboardprint?
package com.avi.casExtends;   
  
import java.util.HashMap;   
import java.util.List;   
import java.util.Map;   
  
import org.springframework.dao.DataAccessException;   
import org.springframework.security.GrantedAuthority;   
import org.springframework.security.GrantedAuthorityImpl;   
import org.springframework.security.userdetails.UserDetails;   
import org.springframework.security.userdetails.UserDetailsService;   
import org.springframework.security.userdetails.UsernameNotFoundException;   
  
import com.avi.dao.AccountDao;   
import com.avi.data.User;   
  
public class UserInfoService implements UserDetailsService{   
       
    private AccountDao accountDao;   
    private Map<String, UserInfo> userMap = null;   
  
    public UserInfoService() {   
          
           
    }   
    public void fillMap(){   
         userMap = new HashMap<String, UserInfo>();   
         List<User> users = accountDao.findAllUsers();   
         UserInfo userInfo = null;   
         for(User user:users){   
            userInfo = new UserInfo(user.getUserName(),user.getPassword(),true,new GrantedAuthority[]{   
                new GrantedAuthorityImpl(user.getRole()),   
            });   
            userInfo.setUserId(user.getId().toString());   
               
             userMap.put(user.getUserName(), userInfo);   
         }   
    }   
       
    public UserDetails loadUserByUsername(String username)   
        throws UsernameNotFoundException, DataAccessException {   
        if(userMap==null)   
            fillMap();   
        return userMap.get(username);   
    }   
  
    public AccountDao getAccountDao() {   
        return accountDao;   
    }   
  
    public void setAccountDao(AccountDao accountDao) {   
        this.accountDao = accountDao;   
    }   
  
    public Map<String, UserInfo> getUserMap() {   
        return userMap;   
    }   
  
    public void setUserMap(Map<String, UserInfo> userMap) {   
        this.userMap = userMap;   
    }   
  
}  
package com.avi.casExtends;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.dao.DataAccessException;
import org.springframework.security.GrantedAuthority;
import org.springframework.security.GrantedAuthorityImpl;
import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.UserDetailsService;
import org.springframework.security.userdetails.UsernameNotFoundException;

import com.avi.dao.AccountDao;
import com.avi.data.User;

public class UserInfoService implements UserDetailsService{
 
 private AccountDao accountDao;
 private Map<String, UserInfo> userMap = null;

    public UserInfoService() {
       
        
    }
    public void fillMap(){
      userMap = new HashMap<String, UserInfo>();
         List<User> users = accountDao.findAllUsers();
         UserInfo userInfo = null;
         for(User user:users){
          userInfo = new UserInfo(user.getUserName(),user.getPassword(),true,new GrantedAuthority[]{
           new GrantedAuthorityImpl(user.getRole()),
          });
          userInfo.setUserId(user.getId().toString());
          
             userMap.put(user.getUserName(), userInfo);
         }
    }
    
    public UserDetails loadUserByUsername(String username)
        throws UsernameNotFoundException, DataAccessException {
     if(userMap==null)
      fillMap();
        return userMap.get(username);
    }

 public AccountDao getAccountDao() {
  return accountDao;
 }

 public void setAccountDao(AccountDao accountDao) {
  this.accountDao = accountDao;
 }

 public Map<String, UserInfo> getUserMap() {
  return userMap;
 }

 public void setUserMap(Map<String, UserInfo> userMap) {
  this.userMap = userMap;
 }

}
 

 private AccountDao accountDao;是注入进来的查数据库的类

然后修改XML文件指定所要用到的service

+ expand sourceview plaincopy to clipboardprint?
<authentication-provider user-service-ref="userDetailsService"/>   
  
<bean id="userDetailsService" class="com.avi.casExtends.UserInfoService" singleton="false">   
        <property name="accountDao" ref="accountDao"/>   
</bean>  
<authentication-provider user-service-ref="userDetailsService"/>

<bean id="userDetailsService" class="com.avi.casExtends.UserInfoService" singleton="false">
  <property name="accountDao" ref="accountDao"/>
</bean> 


${session.SPRING_SECURITY_CONTEXT.authentication.principal.username}
分享到:
评论

相关推荐

    利用spring security控制同一个用户只能一次登陆

    标题中的“利用Spring Security控制同一个用户只能一次登录”是指在基于Spring Security的Web应用程序中实现单点登录(Single Sign-On, SSO)的功能,确保同一时间只有一个设备或浏览器会话可以登录同一用户的账户。...

    springsecurity原理流程图.pdf

    Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架,它是安全领域中Spring生态系统的一部分。Spring Security旨在为Java应用程序提供一个全面的安全解决方案,尤其适用于企业级应用场景。它主要...

    初识 Spring Security - v1.1.pdf

    **Spring Security**是一种广泛应用于Java企业级项目中的安全框架,它基于Spring AOP(面向切面编程)和Servlet过滤器来提供全面的安全解决方案。该框架能够在Web请求级别以及方法调用级别处理身份验证...

    使用 Spring Session 与 Spring security 完成网站登录改造.docx

    Spring Session 和 Spring Security 是两个非常重要的 Spring 框架组件,它们在构建现代 Web 应用程序时扮演着关键角色。Spring Session 提供了一种在分布式环境中管理用户会话(Session)的方式,而 Spring ...

    SpringSecurity 之自定义用户权限信息的存取

    在Spring框架中,SpringSecurity模块用于提供全面的安全服务,包括认证和授权。本文将详细探讨SpringSecurity中关于自定义用户权限信息存取的实现方法,包括如何通过配置文件和数据库来管理用户的认证信息和权限数据...

    SpringSecurity.pdf

    Spring Security是一个功能强大、可高度定制的身份验证和访问控制框架,它是Java平台中保护企业应用安全的首选解决方案。Spring Security提供了全面的安全性解决方案,旨在支持如认证、授权等安全需求。 认证和授权...

    spring security权限控制

    在Spring Security中,用户的身份信息通常存储在`UserDetails`对象中,而`Authentication`对象则封装了这些信息。认证过程可以通过实现`AuthenticationProvider`接口来自定义。 2. **授权(Authorization)**:授权...

    Spring Security 2.0.x完全中文参考文档

    Spring Security 提供了一套完整的解决方案来解决Web应用程序和普通Java应用程序中的安全问题,包括认证(Authentication)、授权(Authorization)以及安全配置等。 **1.2. 历史** Spring Security 的前身是Acegi...

    spring security4登陆例子

    ### Spring Security 4 登录示例详解 #### 一、概览 在现代Web应用开发中,安全性至关重要。Spring Security 是一款广泛使用的安全框架,它为基于Spring的应用提供了全面的安全解决方案,包括认证、授权等核心功能...

    spring hibernate security整合

    在Java Web开发中,Spring、Hibernate和Spring Security是三个非常重要的框架。Spring作为一个全面的开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能;Hibernate则是一个强大的对象关系映射(ORM)工具...

    spring-security使用数据库用户认证

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护基于Java的应用程序。在本主题中,我们将深入探讨如何使用Spring Security与数据库配合,实现用户认证。这一过程涉及多个步骤,包括...

    springsecurity的帮助文档

    - **Spring Security**:Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架。它为开发者提供了多种方式来保护应用程序,并且可以非常灵活地根据项目需求进行配置。 - **历史沿革**:自2005年起...

    spring security用数据库的示例

    在"spring security用数据库的示例"中,我们将深入探讨如何配置Spring Security以使用数据库进行用户管理和权限控制。 首先,Spring Security的核心组件包括Authentication(认证)和Authorization(授权)。认证是...

    spring security 参考手册中文版

    Spring Security 参考 1 第一部分前言 15 1.入门 16 2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 ...

    Spring Security 3.1 配置实例,有URL 方法拦截,都存数据库 maven

    下面将详细探讨Spring Security 3.1中的配置实例。 ### 1. URL 和方法拦截 Spring Security允许我们定义哪些URL路径需要用户进行身份验证才能访问。这通常通过在`web.xml`中配置`&lt;http&gt;`元素来实现。例如: ```...

    jwt学习Spring-security

    在 Spring Security 中,会话超时配置可以通过 server.servlet.session.timeout 或 spring.session.timeout 来配置。在配置中,可以设置会话超时时间、最大登录用户数量等。 在 Spring Security 中,cookie 的安全...

    spring security 3 的学习的帮助文档

    10. **Spring Security与Spring MVC的集成**:在Spring MVC应用中,Spring Security可以通过声明式的方式与控制器紧密结合,学习者需要掌握如何在MVC环境中配置和使用Spring Security。 11. **自定义配置(Custom ...

    SpringSecurity 3.0.1.RELEASE.CHM

    5.5. Spring Security中的访问控制(验证) 5.5.1. 安全和AOP建议 5.5.2. 安全对象和AbstractSecurityInterceptor 5.5.2.1. 配置属性是什么? 5.5.2.2. RunAsManager 5.5.2.3. AfterInvocationManager 5.5.2.4...

    spring security3.0 spring权限问题

    ### Spring Security 3.0权限问题相关知识点 #### 一、Spring Security简介 ...通过以上知识点的学习,我们可以深入了解 Spring Security 3.0 的核心功能和配置方式,为实际项目中的安全设计提供有力的支持。

Global site tag (gtag.js) - Google Analytics