📄 ldapauthorizationpolicy.java
字号:
/** * $RCSfile$ * $Revision: $ * $Date: 2006-04-07 09:28:54 -0500 (Fri, 07 Apr 2006) $ * * Copyright (C) 2008 Jive Software. All rights reserved. * * This software is published under the terms of the GNU Public License (GPL), * a copy of which is included in this distribution, or a commercial license * agreement with Jive. */package org.jivesoftware.openfire.ldap;import org.jivesoftware.openfire.ldap.LdapManager;import org.jivesoftware.openfire.auth.AuthorizationPolicy;import org.jivesoftware.util.JiveGlobals;import org.xmpp.packet.JID;import javax.naming.directory.Attribute;import javax.naming.directory.Attributes;import javax.naming.directory.DirContext;import java.util.ArrayList;import java.util.Collection;import java.util.Enumeration;/** * Provider for authorization using LDAP. Checks if the authenticated * principal is in the user's LDAP object using the authorizeField * from the <tt>openfire.xml</tt> file. An entry in that file would * look like the following: * <p/> * <pre> * <ldap> * <authorizeField> k5login </authorizeField> * </ldap></pre> * <p/> * This implementation requires that LDAP be configured, obviously. * * @author Jay Kline */public class LdapAuthorizationPolicy implements AuthorizationPolicy { private LdapManager manager; private String usernameField; private String authorizeField; public LdapAuthorizationPolicy() { manager = LdapManager.getInstance(); usernameField = manager.getUsernameField(); authorizeField = JiveGlobals.getXMLProperty("ldap.authorizeField", "k5login"); } /** * Returns if the principal is explicity authorized to the JID, throws * an UnauthorizedException otherwise * * @param username The username requested.import org.jivesoftware.openfire.ldap.*; * @param principal The principal requesting the username. */ public boolean authorize(String username, String principal) { return getAuthorized(username).contains(principal); } /** * Returns a String Collection of principals that are authorized to use * the named user. * * @param username the username. * @return A String Collection of principals that are authorized. */ private Collection<String> getAuthorized(String username) { // Un-escape Node username = JID.unescapeNode(username); Collection<String> authorized = new ArrayList<String>(); DirContext ctx = null; try { String userDN = manager.findUserDN(username); // Load record. String[] attributes = new String[]{ usernameField, authorizeField }; ctx = manager.getContext(); Attributes attrs = ctx.getAttributes(userDN, attributes); Attribute authorizeField_a = attrs.get(manager.getNameField()); if (authorizeField_a != null) { for (Enumeration e = authorizeField_a.getAll(); e.hasMoreElements();) { authorized.add((String)e.nextElement()); } } return authorized; } catch (Exception e) { // Ignore. } finally { try { if (ctx != null) { ctx.close(); } } catch (Exception ignored) { // Ignore. } } return authorized; } /** * Returns the short name of the Policy * * @return The short name of the Policy */ public String name() { return "LDAP Authorization Policy"; } /** * Returns a description of the Policy * * @return The description of the Policy. */ public String description() { return "Provider for authorization using LDAP. Checks if the authenticated principal is in the user's LDAP object using the authorizeField property."; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -