【问题标题】:Storing multiple values on Principle在 Principle 上存储多个值
【发布时间】:2020-01-19 07:46:12
【问题描述】:

我正在使用 Principle 来存储当前的用户 id,

存储

   val principalExtractor: (MutableMap<String, Any?>) -> Any? = { params ->
        val session = params.get("session") as MutableMap<String, Any?>
        val user = session.get("user") as MutableMap<String, Any?>
        user.get("email")
    }

用法

@GetMapping("{userId}/activationWidgetUrl")
    fun getActivationWidgetUrl(principal: Principal, authentication: Authentication, @PathVariable userId: String): ActivationWidgetResponse? {

   let id = principal.name
}

问题: 我正面临需要从会话中获取更多详细信息的情况,例如:-companyId-。

我想在principal上存储一个User对象而不仅仅是一个字符串,但是principal.name默认返回字符串。

问题: 原则上如何存储对象(子类?),还是有更好的方法?

【问题讨论】:

    标签: java spring kotlin spring-security oauth


    【解决方案1】:

    通过使用身份验证解决了这个问题。

    principalExtractor

    val principalExtractor: (MutableMap<String, Any?>) -> Any? = { params ->
            val session = params.get("session") as MutableMap<String, Any?>
            val user = session.get("user") as MutableMap<String, Any?>
            val mapper = ObjectMapper()
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
            val userDetails = mapper.convertValue(user, UserDetails::class.java)
            userDetails
        }
    

    用法

    @GetMapping("{userId}/activationWidgetUrl")
        fun getActivationWidgetUrl(authentication: Authentication, @PathVariable userId: String): ActivationWidgetResponse? {
    
           (authentication.principal as UserDetails).let { userDetails ->
                let id = userDetails.id
            }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-21
      • 2010-11-13
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      相关资源
      最近更新 更多