[jboss-user] [EJB 3.0] - Security annotations not working in 5.0.0.Beta3

javidjamae do-not-reply at jboss.com
Fri Jan 25 11:38:27 EST 2008


I'm trying to call an EJB with security annotations set on it, but only some of them work properly. Here is the EJB that I have:


  | @SecurityDomain("simple-security-domain")
  | @RolesAllowed( { "bank-manager", "teller" })
  | @Stateless
  | public class StatelessCalculatorBean implements Calculator, CalculatorRemote {
  | 
  | 	@EJB(beanName = "InterestRateMBean")
  | 	private InterestRateManager interstRateManager;
  | 
  | 	public double calculateTotalInterest(double presentValue, int years) {
  | 		return calculateFutureValue(presentValue, years) - presentValue;
  | 	}
  | 
  | 	@RolesAllowed("teller")
  | 	public double calculateFutureValue(double presentValue, int years) {
  | 		double interestRate = interstRateManager.getInterestRate() / 100;
  | 		return presentValue * Math.pow((1.0 + interestRate), years);
  | 	}
  | 
  | 	@RolesAllowed("bank-manager")
  | 	public double getInterestRate() {
  | 		return interstRateManager.getInterestRate();
  | 	}
  | 
  | 	@DenyAll
  | 	public String getTheAnswerToLifeTheUniverseAndEverything() {
  | 		return "42";
  | 	}
  | 
  | 	@PermitAll
  | 	public String freeForAll() {
  | 		return "You're in!";
  | 	}
  | 
  | }

Here are my roles:

  | admin=bank-manager,teller
  | bank-manager=bank-manager
  | teller=teller
  | joe=customer
  | 

Here is what happens when I try to access the various methods from a standalone client:


  | --------------------------------------------
  | User: admin, Roles: bank-manager, teller
  | --------------------------------------------
  | admin could call calculateFutureValue (requires 'teller')
  | admin could call calculateTotalInterest (requires 'bank-manager' or 'teller')
  | admin could call getInterestRate (requires 'bank-manager')
  | admin could not call getTheAnswerToLifeTheUniverseAndEverything (DenyAll) - Caller unauthorized
  | admin could not call freeForAll (PermitAll) - Caller unauthorized
  | --------------------------------------------
  | User: bank-manager, Roles: bank-manager
  | --------------------------------------------
  | bank-manager could not call calculateFutureValue (requires 'teller') - Caller unauthorized
  | bank-manager could call calculateTotalInterest (requires 'bank-manager' or 'teller')
  | bank-manager could call getInterestRate (requires 'bank-manager')
  | bank-manager could not call getTheAnswerToLifeTheUniverseAndEverything (DenyAll) - Caller unauthorized
  | bank-manager could not call freeForAll (PermitAll) - Caller unauthorized
  | --------------------------------------------
  | User: teller, Roles: teller
  | --------------------------------------------
  | teller could call calculateFutureValue (requires 'teller')
  | teller could call calculateTotalInterest (requires 'bank-manager' or 'teller')
  | teller could not call getInterestRate (requires 'bank-manager') - Caller unauthorized
  | teller could not call getTheAnswerToLifeTheUniverseAndEverything (DenyAll) - Caller unauthorized
  | teller could not call freeForAll (PermitAll) - Caller unauthorized
  | --------------------------------------------
  | User: joe, Roles: customer
  | --------------------------------------------
  | joe could not call calculateFutureValue (requires 'teller') - Caller unauthorized
  | joe could call calculateTotalInterest (requires 'bank-manager' or 'teller')
  | joe could not call getInterestRate (requires 'bank-manager') - Caller unauthorized
  | joe could not call getTheAnswerToLifeTheUniverseAndEverything (DenyAll) - Caller unauthorized
  | joe could not call freeForAll (PermitAll) - Caller unauthorized
  | 

There are two problems (bugs?):

1) Permit all does not work for any of the roles
2) From my understanding, the class-level @RolesAllowed annotation should apply to all the methods that don't override this with their own method-level @RolesAllowed annotation. As seen in the output above, everybody was able to access calculateTotalInterest() even though only bank-manager and teller were supposed to have access.

Has anybody else encountered this? I'll be glad to open a JIRA issue if these are bugs. 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4123579#4123579

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4123579



More information about the jboss-user mailing list