第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法使用 OAuth2.0 將額外參數(shù)傳遞給 Spring-Security

無法使用 OAuth2.0 將額外參數(shù)傳遞給 Spring-Security

不負相思意 2022-05-20 18:35:58
再會。我需要根據(jù)以下 URL 使用 springboot2 實現(xiàn) OAuth2 和 spring-security。網(wǎng)址名稱: https ://www.devglan.com/spring-security/spring-boot-oauth2-jwt-example我做到了。在這里,我在驗證用戶時對上述代碼有另一個不同的要求。我需要在郵遞員工具的 x-www-form-urlencoded 選項卡中傳遞 companyId 以及用戶名和密碼以及 grant_type(password)。我必須根據(jù)用戶名和 companyId 獲取用戶。所以請幫我看看我需要在上面的鏈接代碼中做些什么改變,這樣我才能達到我的要求。在這里我只收到電子郵件。我需要電子郵件和 companyId。@Override@Transactionalpublic UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {    User user = userRepository.findByEmail(email).orElseThrow(            () -> new UsernameNotFoundException("User Not Found with -> username or email : " + email));    return UserPrinciple.build(user);}Expected:@Override@Transactionalpublic UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {    User user = userRepository.findByEmailAndCompanyId(email,companyId).orElseThrow(            () -> new UsernameNotFoundException("User Not Found with -> username or email : " + email));    return UserPrinciple.build(user);}目前使用用戶名和密碼它工作正常。但是在我的系統(tǒng)中,我將同一用戶映射到不同的公司。如果發(fā)現(xiàn)同一用戶映射到多個公司,我會收到如下錯誤。{ "error": "unauthorized", "error_description": "查詢沒有返回唯一結(jié)果:2;嵌套異常是 javax.persistence.NonUniqueResultException:查詢沒有返回唯一結(jié)果:2" }我需要根據(jù)用戶名和密碼以及導致單個用戶的 companyId 獲取用戶。有人可以幫助解決這個問題。提前非常感謝。
查看完整描述

3 回答

?
至尊寶的傳說

TA貢獻1789條經(jīng)驗 獲得超10個贊

Bhanuprakash,我也有類似的問題,但我暫時這樣做了:

在“l(fā)oadUserByUsername”方法中寫下:

HttpServletRequest 請求 = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); System.out.println("compnayId:" + request.getParameter("companyId"));

我認為有一個更優(yōu)雅的解決方案,但我暫時使用了這個。

謝謝。


查看完整回答
反對 回復 2022-05-20
?
慕工程0101907

TA貢獻1887條經(jīng)驗 獲得超5個贊

如果您想要訪問令牌的其他信息,您可以使用 TokenEnhancer 類來做到這一點。


CustomTokenEnhancer.java


public class CustomTokenEnhancer implements TokenEnhancer {


    @Override

    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {

        User user = (User) authentication.getPrincipal();

        final Map<String, Object> additionalInfo = new HashMap<>();


        additionalInfo.put("id", user.getCompanyId());

        additionalInfo.put("authorities", user.getAuthorities());


        ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);


        return accessToken;

    }


}

然后使用此類的實例來 void configure(AuthorizationServerEndpointsConfigurer endpoints) 像這樣的方法


AuthorizationServerConfig.java


@Override

public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {

    endpoints.authenticationManager(authenticationManager)

            .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST)

            .tokenEnhancer(new CustomTokenEnhancer());

}


查看完整回答
反對 回復 2022-05-20
?
HUWWW

TA貢獻1874條經(jīng)驗 獲得超12個贊

這條評論對我來說非常有用!

HttpServletRequest 請求 = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); System.out.println("compnayId:" + request.getParameter("companyId"));


查看完整回答
反對 回復 2022-05-20
  • 3 回答
  • 0 關(guān)注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號