All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jgroups.auth.FixedMembershipToken Maven / Gradle / Ivy

There is a newer version: 9.1.7.Final
Show newest version
package org.jgroups.auth;

import org.jgroups.Event;
import org.jgroups.Message;
import org.jgroups.PhysicalAddress;
import org.jgroups.annotations.Property;
import org.jgroups.stack.IpAddress;
import org.jgroups.util.Bits;
import org.jgroups.util.Util;

import java.io.DataInput;
import java.io.DataOutput;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

/**
 * 

* The FixedMemberShipToken object predefines a list of IP addresses and ports that can join the group. *

*

* Configuration parameters for this example are shown below: *

*
    *
  • fixed_members_value (required) = List of IP addresses & ports (optionally) - ports must be * seperated by a '/' e.g. 127.0.0.1/1010*127.0.0.1/4567
  • *
  • fixed_members_seperator (required) = The seperator used between IP addresses - e.g. *
  • *
* * @author Chris Mills ([email protected]) */ public class FixedMembershipToken extends AuthToken { private final List memberList = new ArrayList<>(); private String token = "emptyToken"; @Property private String fixed_members_seperator = ","; public FixedMembershipToken() { } public FixedMembershipToken(String token) { this.token=token; } public String getName() { return "org.jgroups.auth.FixedMembershipToken"; } @Property public void setFixedMembersSeparator(String value) { fixed_members_seperator = value; } /** Check if I'm in memberList, too */ /*public void start() throws Exception { super.start(); IpAddress self=(IpAddress)auth.getPhysicalAddress(); if(!isInMembersList(self)) throw new IllegalStateException("own physical address " + self + " is not in members (" + memberList + ")"); } */ public boolean authenticate(AuthToken token, Message msg) { if ((token != null) && (token instanceof FixedMembershipToken) && (this.memberList != null)) { PhysicalAddress src = (PhysicalAddress) auth.down(new Event(Event.GET_PHYSICAL_ADDRESS, msg.getSrc())); if (src == null) { log.error(Util.getMessage("DidnTFindPhysicalAddressFor") + msg.getSrc()); return false; } return isInMembersList((IpAddress)src); } if (log.isWarnEnabled()) log.warn("Invalid AuthToken instance - wrong type or null"); return false; } public boolean isInMembersList(IpAddress sender) { if(memberList == null || sender == null) return false; for(InetSocketAddress addr: memberList) { if(match(sender, addr)) return true; } return false; } public static boolean match(IpAddress sender, InetSocketAddress addr) { return !(sender == null || addr == null) && addr.getAddress().equals(sender.getIpAddress()) && (addr.getPort() == 0 || addr.getPort() == sender.getPort()); } @Property(name = "fixed_members_value") public void setMemberList(String list) throws UnknownHostException { memberList.clear(); StringTokenizer memberListTokenizer = new StringTokenizer(list, fixed_members_seperator); while (memberListTokenizer.hasMoreTokens()) { String tmp=memberListTokenizer.nextToken().trim(); int index=tmp.lastIndexOf('/'); int port=index != -1? Integer.parseInt(tmp.substring(index+1)) : 0; String addr_str=index != -1? tmp.substring(0, index) : tmp; InetAddress addr=InetAddress.getByName(addr_str); memberList.add(new InetSocketAddress(addr, port)); } } public void writeTo(DataOutput out) throws Exception { Bits.writeString(this.token,out); } public void readFrom(DataInput in) throws Exception { this.token = Bits.readString(in); } public int size() { return Util.size(token); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy