Hi

If all you need is to enforce RBAC with Spring security, then IMHO CXF offers a much much simpler option,

http://cxf.apache.org/docs/security.html#Security-Authorization

Cheers, Sergey
On 12/04/13 14:01, Julio Carlos Barrera Juez wrote:
I have achieved some goals. I have attached two interceptors to my
JAX-RS server and it worked. I copied a interceptor from Internet and
modified it, the result is:

public class CXFSecurityContextProviderInterceptor extends
AbstractPhaseInterceptor<Message> {

public CXFSecurityContextProviderInterceptor() {
super(Phase.RECEIVE);
}

public void handleMessage(Message message) throws Fault {
final Authentication authentication =
message.getExchange().get(Authentication.class);
if (authentication != null && authentication.isAuthenticated()) {
message.put(SecurityContext.class, new SecurityContext() {
public Principal getUserPrincipal() {
return authentication;
}

public boolean isUserInRole(String role) {
Collection<GrantedAuthority> authorities = authentication.getAuthorities();
if (authorities != null) {
for (GrantedAuthority authority : authorities) {
if (role.equals(authority.getAuthority())) {
return true;
}
}
}
return false;
}
});
}
}
}

Now I realized that 'message' in this case has not an 'Authentication'
class attached in the 'Exchange' attribute of the message. I have read
that I need to add a filter that fulfils this field. I tried to find
information and I'm continuing trying it, but I have not found a
solution yet.

It seems so difficult to link Spring Security configuration with CXF!!

This is my simple Spring Security configuration:

<!-- Spring Security -->
<security:global-method-security secured-annotations="enabled" />

<security:http use-expressions="true">
<security:intercept-url pattern="/**" access="ROLE_ADMIN" />
<security:http-basic />
</security:http>

<security:authentication-manager alias="authenticationManager">
<security:authentication-provider>
<security:user-service>
<security:user name="admin" password="admin"
authorities="ROLE_ADMIN" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>

On 10 April 2013 23:33, Jason Pell <[email protected]
<mailto:[email protected]>> wrote:

    As long as you create a spring SecurityContext in cxf interceptor
    and add
    it to the spring security holder not sure how that works with jaxrs
    but in
    jaxws I just add a interceptor after authenticating.

    Then you can use the acl stuff as Samuel suggested
    On Apr 11, 2013 4:02 AM, "Samuel Quintana" <[email protected]
    <mailto:[email protected]>> wrote:

     > I'm not sure but you can use Spring Security ACL, in this case
    you need
     > filter at classes level, or interfaces from wouy SW.
     >
     > This post<
     >
    
http://stackoverflow.com/questions/7481869/spring-security-how-acl-grants-permissions
     > >can
     > help you.
     >
     > Regards.
     >
     >
     > 2013/4/10 Sergey Beryozkin <[email protected]
    <mailto:[email protected]>>
     >
     > > Hi, I'm not sure you can link it without having a web
    application, but
     > > only an embedded Jetty server.
     > > I guess you may want to ask on Spring Security forums how to
    do, if you
     > > find out something new, let us know please :-)
     > > Sergey
     > >
     > > On 10/04/13 17:27, Julio Carlos Barrera Juez wrote:
     > >
     > >> I am able to attach a filter in a CXF Servlet in a Web
    Application using
     > >> configuration stored in /WEB-INF/web.xml:
     > >>
     > >> ...
     > >>
     > >> <filter>
     > >> <filter-name>**springSecurityFilterChain</**filter-name>
     > >>
     > >> <filter-class>org.**springframework.web.filter.**
     > >> DelegatingFilterProxy</filter-**class>
     > >> </filter>
     > >>
     > >> <filter-mapping>
     > >> <filter-name>**springSecurityFilterChain</**filter-name>
     > >> <url-pattern>/*</url-pattern>
     > >> </filter-mapping>
     > >>
     > >> ...
     > >>
     > >> It allows me to add Spring Security to CXF REST Web Services.
     > >>
     > >> I want to do exactly the same behaviour but in an standalone
    CXF server,
     > >> not in a Web Application (no web.xml at all!). I'm using Spring to
     > >> configure my CXF server:
     > >>
     > >> ...
     > >>
     > >> <jaxrs:server id="helloService" address="/hello">
     > >> <jaxrs:serviceBeans>
     > >> <ref bean="serviceBean" />
     > >> </jaxrs:serviceBeans>
     > >> </jaxrs:server>
     > >> <bean id="serviceBean" class="sec.Hello" />
     > >>
     > >> ...
     > >>
     > >> I don't know how to hook Spring Security to my CXF server. I
    have not
     > >> found
     > >> any working example or documentation about linking Spring
    Security and
     > >> CXF.
     > >>
     > >>
     > >
     > >
     >


Reply via email to