成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Apache Shiro 配置 LDAP 驗(yàn)證

zhiwei / 2729人閱讀

摘要:通常在根據(jù)進(jìn)行身份驗(yàn)證時(shí)一般進(jìn)行以下三步利用一個(gè)用戶(hù)的用戶(hù)名和密碼綁定到服務(wù)器。這里使用來(lái)簡(jiǎn)化操作用戶(hù)名不存在拋出異常用戶(hù)被管理員鎖定拋出異常角色加入認(rèn)證對(duì)象權(quán)限加入認(rèn)證對(duì)象關(guān)鍵的代碼如下,驗(yàn)證用戶(hù)和獲取用戶(hù)信息的配置如下

通常在根據(jù)LDAP進(jìn)行身份驗(yàn)證時(shí)一般進(jìn)行以下三步:

利用一個(gè)LDAP用戶(hù)的用戶(hù)名和密碼綁定到LDAP服務(wù)器。

在LDAP中檢索一個(gè)用戶(hù)的條目,然后將提供的密碼和檢索到的LDAP記錄中進(jìn)行驗(yàn)證。

根據(jù)LDAP提供的記錄,再去本系統(tǒng)中查找授權(quán)信息。

Shiro 提供了DefaultLdapRealm,只做了第二步,根據(jù)用戶(hù)的條目和密碼來(lái)驗(yàn)證。并不能滿(mǎn)足我們的需求,所以肯定是要定制化LdapRealm。

這里使用Spring Ldap 來(lái)簡(jiǎn)化Ldap操作

public class LdapRealm extends AuthorizingRealm {

    private static final Logger logger = LoggerFactory.getLogger(LdapRealm.class);

    private LdapTemplate ldapTemplate;

    @Autowired
    private UserService userService;

    @Autowired
    private RoleService roleService;

    @Autowired
    private MenuService menuService;

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        String username = (String) token.getPrincipal();
        String password = new String((char[]) token.getCredentials());

        try {
            LdapQuery ldapQuery = LdapQueryBuilder.query().base("DC=example,DC=com").searchScope(SearchScope.SUBTREE)
                    .filter("(sAMAccountName={0})", username);

            boolean authResult = ldapTemplate.authenticate(ldapQuery.base(), ldapQuery.filter().encode(), password);

            if (!authResult) {
                logger.debug("ldap authentication for {} failed", username);
                return null;
            }

            User ldapUser = (User) ldapTemplate.searchForObject(ldapQuery, new LdapUserAttrMapper());

            User user = userService.selectUserById(ldapUser.getUserId());
            if (user == null) {
                // 用戶(hù)名不存在拋出異常
                throw new UnknownAccountException();
            }
            if (user.getRemoveFlag()) {
                // 用戶(hù)被管理員鎖定拋出異常
                throw new LockedAccountException();
            }

            SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user, token.getCredentials(),
                    "LdapRealm");
            return authenticationInfo;
        } catch (Exception e) {
            logger.error("ldap authentication failed", e.toString());
            return null;
        }

    }


    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        Long userId = ShiroUtils.getUserId();
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        // 角色加入AuthorizationInfo認(rèn)證對(duì)象
        info.setRoles(roleService.selectRoleKeys(userId));
        // 權(quán)限加入AuthorizationInfo認(rèn)證對(duì)象
        info.setStringPermissions(menuService.selectPermsByUserId(userId));
        return info;
    }

    public LdapTemplate getLdapTemplate() {
        return ldapTemplate;
    }

    public void setLdapTemplate(LdapTemplate ldapTemplate) {
        this.ldapTemplate = ldapTemplate;
    }
}

關(guān)鍵的代碼如下,驗(yàn)證用戶(hù)和獲取LDAP用戶(hù)信息

LdapQuery ldapQuery = LdapQueryBuilder.query().base("DC=example,DC=com").searchScope(SearchScope.SUBTREE)
                    .filter("(sAMAccountName={0})", username);
boolean authResult = ldapTemplate.authenticate(ldapQuery.base(), ldapQuery.filter().encode(), password);
User ldapUser = (User) ldapTemplate.searchForObject(ldapQuery, new LdapUserAttrMapper());

Spring 的 ldap 配置如下:


    
    
    



    



    

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74274.html

相關(guān)文章

  • Apache Shiro 簡(jiǎn)介

    摘要:的很容易反映出常見(jiàn)的工作流程。權(quán)限檢查是執(zhí)行授權(quán)的另一種方式。在安全框架領(lǐng)域提供了一些獨(dú)特的東西一致的會(huì)話(huà),可用于任何應(yīng)用程序和任何架構(gòu)層。 Apache Shiro?是一個(gè)功能強(qiáng)大且易于使用的Java安全框架,可執(zhí)行身份驗(yàn)證,授權(quán),加密和會(huì)話(huà)管理。借助Shiro易于理解的API,可以快速輕松地保護(hù)任何應(yīng)用程序 - 從最小的移動(dòng)應(yīng)用程序到最大的Web和企業(yè)應(yīng)用程序。 1. Apache S...

    econi 評(píng)論0 收藏0
  • apache shiro框架

    摘要:框架提供的接口,是的核心,代表安全管理器對(duì)象??梢蚤_(kāi)發(fā)人員編寫(xiě),框架也提供一些。在中作為應(yīng)用程序和安全數(shù)據(jù)之間的橋梁或連接器。例如要求中必須同時(shí)含有和的權(quán)限才能執(zhí)行方法?!pache shiro框架簡(jiǎn)介  Apache Shiro是一個(gè)強(qiáng)大而靈活的開(kāi)源安全框架,它能夠干凈利落地處理身份認(rèn)證,授權(quán),企業(yè)會(huì)話(huà)管理和加密?,F(xiàn)在,使用Apache Shiro的人越來(lái)越多,因?yàn)樗喈?dāng)簡(jiǎn)單,相比比Sp...

    Tecode 評(píng)論0 收藏0
  • 不用 Spring Security 可否?試試這個(gè)小而美的安全框架

    摘要:寫(xiě)在前面在一款應(yīng)用的整個(gè)生命周期,我們都會(huì)談及該應(yīng)用的數(shù)據(jù)安全問(wèn)題。用戶(hù)的合法性與數(shù)據(jù)的可見(jiàn)性是數(shù)據(jù)安全中非常重要的一部分。 寫(xiě)在前面 在一款應(yīng)用的整個(gè)生命周期,我們都會(huì)談及該應(yīng)用的數(shù)據(jù)安全問(wèn)題。用戶(hù)的合法性與數(shù)據(jù)的可見(jiàn)性是數(shù)據(jù)安全中非常重要的一部分。但是,一方面,不同的應(yīng)用對(duì)于數(shù)據(jù)的合法性和可見(jiàn)性要求的維度與粒度都有所區(qū)別;另一方面,以當(dāng)前微服務(wù)、多服務(wù)的架構(gòu)方式,如何共享Sessi...

    toddmark 評(píng)論0 收藏0
  • web開(kāi)發(fā)安全框架中的Apache Shiro的應(yīng)用

    摘要:安全框架是目前為止作為登錄注冊(cè)最常用的框架,因?yàn)樗值膹?qiáng)大簡(jiǎn)單,提供了認(rèn)證授權(quán)加密和會(huì)話(huà)管理等功能。本質(zhì)上是一個(gè)特定安全的。當(dāng)配置時(shí),必須指定至少一個(gè)用來(lái)進(jìn)行身份驗(yàn)證和或授權(quán)。提供了多種可用的來(lái)獲取安全相關(guān)的數(shù)據(jù)。 web開(kāi)發(fā)安全框架中的Apache Shiro的應(yīng)用前階段就hadoop的分享了一些內(nèi)容,希望對(duì)新手入門(mén)的朋友有點(diǎn)幫助吧!對(duì)于hadoop新手入門(mén)的,還是比較推薦大快搜索...

    2json 評(píng)論0 收藏0
  • shiro入門(mén)筆記

    摘要:當(dāng)前可以是身份,不需要經(jīng)過(guò)認(rèn)證或者在原先的中存在記錄。當(dāng)前必須擁有所有指定的角色時(shí),才能訪(fǎng)問(wèn)被該注解標(biāo)注的方法。 關(guān)于 Apache Shiro 概念基本都粘自官網(wǎng) http://shiro.apache.org/詳細(xì)中文博客 http://wiki.jikexueyuan.com/p...與SpringBoot整合 https://segmentfault.com/a/11... ...

    yagami 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<