From: Ron S. <rs...@re...> - 2015-05-12 00:40:09
|
Hi Mark, I have a partial answer. That is, I can get Resteasy with Undertow to recognize @RolesAllowed, but I don't know much about security in Undertow. In the attached RollsAllowedTest, I have configured Undertow to impose identity constraints: > @BeforeClass > public static void init() throws Exception > { > server = new UndertowJaxrsServer().start(); > ResteasyDeployment deployment = new ResteasyDeployment(); > deployment.setApplicationClass(TestApplication.class.getName()); > deployment.setSecurityEnabled(true); > DeploymentInfo di = server.undertowDeployment(deployment, "/base"); > di.setContextPath("/di"); > di.setDeploymentName("DI"); > di.setClassLoader(TestApplication.class.getClassLoader()); > server.deploy(di); > } so that the test > @Test > public void testDeploymentInfo() throws Exception > { > Client client = ClientBuilder.newClient(); > Invocation.Builder builder = > client.target("http://localhost:8081/di/base/test").request(); > System.out.println("auth: " + getBasicAuthentication("bill", > "pwd")); > builder.header("Authorization", getBasicAuthentication("bill", > "pwd")); > String val = builder.get(String.class); > Assert.assertEquals("hello world", val); > client.close(); > } fails with status 403. In particular, org.jboss.resteasy.plugins.interceptors.RoleBasedSecurityFilter.filter() fails because it gets a null user principal. Can you see if you can set the user principal and let me know? Thanks, Ron On 04/16/2015 11:33 AM, Mark Vinkx wrote: > Hi > > I would like to enable basic authentication and @RolesAllowed for restEasy on UndertowJaxrsServer > Can someone help me out how to enable this > > I found some references to set resteasy.role.based.security but I did not find a way how to set this in my DeploymentInfo > <context-param> > <param-name>resteasy.role.based.security</param-name> > <param-value>true</param-value> > </context-param> > > Some of my code I have been trying is. But it is not working. > > webServer = new UndertowJaxrsServer(); > Undertow.Builder serverBuilder=Undertow.builder(); > serverBuilder = serverBuilder.addHttpListener(Integer.parseInt(properties.getProperty("port")), properties.getProperty("address")); > webServer.start(serverBuilder); > > HashMap users = new HashMap(2); > users.put("userOne", "passwordOne".toCharArray()); > users.put("userTwo", "passwordTwo".toCharArray()); > MapIdentityManager identityManager = new MapIdentityManager(users); > > DeploymentInfo di = webServer.undertowDeployment(MyApp.class) ; > di.setClassLoader(GetRest.class.getClassLoader()) ; > di.setDeploymentName("My Application"); > di.setContextPath("/di"); > LoginConfig loginConfig=new LoginConfig("BASIC","MyRealm"); > di.setLoginConfig(loginConfig); > di.setIdentityManager(identityManager); > webServer.deploy(di); > webServer.deploy(MyApp.class); > > > > class MapIdentityManager implements IdentityManager { > private final Map<String, char[]> users; > > public MapIdentityManager(Map<String, char[]> users) { > this.users = users; > } > > @Override > public Account verify(Account account) { > return account; > } > > @Override > public Account verify(String id, Credential credential) { > Account account = this.getAccount(id); > return account != null && this.verifyCredential(account, credential)?account:null; > } > > @Override > public Account verify(Credential credential) { > return null; > } > > private boolean verifyCredential(Account account, Credential credential) { > if(credential instanceof PasswordCredential) { > char[] password = ((PasswordCredential)credential).getPassword(); > char[] expectedPassword = (char[])this.users.get(account.getPrincipal().getName()); > return Arrays.equals(password, expectedPassword); > } else { > return false; > } > } > > private Account getAccount(final String id) { > return this.users.containsKey(id)?new Account() { > private final Principal principal = new Principal() { > @Override > public String getName() { > return id; > } > }; > @Override > public Principal getPrincipal() { > return this.principal; > } > @Override > public Set<String> getRoles() { > return Collections.emptySet(); > } > }:null; > } > } > > > > ------------------------------------------------------------------------------ > BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT > Develop your own process in accordance with the BPMN 2 standard > Learn Process modeling best practices with Bonita BPM through live exercises > http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ > source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF > _______________________________________________ > Resteasy-users mailing list > Res...@li... > https://lists.sourceforge.net/lists/listinfo/resteasy-users |