Hi, this uglyness looks like this now (I am including three more methods):
/* USERNAME, PASSWORD */ public static UserDetailsService buildUserDetailsWithUsernameAndPasswordService(@Inject PasswordEncoder encoder, @Inject SaltSource salt) { return new UserDetailsWithUsernameAndPasswordService(encoder, salt); } /* OPENID */ // public static UserDetailsService buildUserDetailsWithOpenIDService() { // return new UserDetailsWithOpenIDServiceImpl(); // } // public static OpenIDAuthenticationProvider buildOpenIDAuthenticationProvider( // @InjectService("UserDetailsWithOpenIDService") UserDetailsService userDetailsService) throws Exception { // OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider(); // // provider.setUserDetailsService(userDetailsService); // provider.afterPropertiesSet(); // // return provider; // } // public static void contributeProviderManager( // OrderedConfiguration<AuthenticationProvider> configuration, // @InjectService("OpenIDAuthenticationProvider") AuthenticationProvider openIdAuthenticationProvider) { // // configuration.add("openIDAuthenticationProvider", openIdAuthenticationProvider); // } public static void contributeProviderManager( OrderedConfiguration<AuthenticationProvider> configuration, // @InjectService("OpenIDAuthenticationProvider") // AuthenticationProvider openIdAuthenticationProvider, @InjectService("DaoAuthenticationProvider") AuthenticationProvider daoAuthenticationProvider) { // configuration.add("openIDAuthenticationProvider", openIdAuthenticationProvider); OpenIDAuthenticationProvider provider = new OpenIDAuthenticationProvider(); UserDetailsService userDetailService = new UserDetailsWithOpenIDServiceImpl(); provider.setUserDetailsService(userDetailService); try { provider.afterPropertiesSet(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } configuration.add("daoAuthenticationProvider", daoAuthenticationProvider ); configuration.add("openIDAuthenticationProvider", provider); } public static OpenIDAuthenticationProcessingFilter buildRealOpenIDAuthenticationProcessingFilter( @SpringSecurityServices final AuthenticationManager manager, @SpringSecurityServices final RememberMeServices rememberMeServices, @Inject @Value("${spring-security.check.url}") final String authUrl, @Inject @Value("${spring-security.target.url}") final String targetUrl, @Inject @Value("${spring-security.failure.url}") final String failureUrl) throws Exception { OpenIDAuthenticationProcessingFilter filter = new OpenIDAuthenticationProcessingFilter(); filter.setAuthenticationManager(manager); filter.setAuthenticationFailureUrl(failureUrl); filter.setDefaultTargetUrl(targetUrl); filter.setFilterProcessesUrl(authUrl); filter.setRememberMeServices(rememberMeServices); filter.afterPropertiesSet(); return filter; } public static HttpServletRequestFilter buildOpenIDAuthenticationProcessingFilter( final OpenIDAuthenticationProcessingFilter filter) { return new HttpServletRequestFilterWrapper(filter); } public static void contributeHttpServletRequestHandler( OrderedConfiguration<HttpServletRequestFilter> configuration, @InjectService("OpenIDAuthenticationProcessingFilter") HttpServletRequestFilter openIDAuthenticationProcessingFilter) { configuration.add("openIDAuthenticationProcessingFilter", openIDAuthenticationProcessingFilter, "before:springSecurityAuthenticationProcessingFilter", "after:springSecurityHttpSessionContextIntegrationFilter"); } The error is gone, but now how do I control which provider gets called based on wheter user is using username/password form or openid form? Login.tml ======== <snip> <t:block t:id="loginWithUserNameAndPassword"> <p> Login with username and password or with <a t:type="actionlink" t:id="refreshOpenIDZone" href="#" t:zone="loginZone">OpenID</a> </p> <form xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" action="${loginCheckUrl}" method="POST"> <t:if test="failed"> Wrong username/password! <br /> </t:if> <label class="username" for="j_username">username:</label> <input class="username" name="j_username" type="text" size="10" maxlength="30" /> <label class="password" for="j_password">password:</label> <input class="password" name="j_password" type="password" size="10" maxlength="30" /> <input id="submit" class="submit" type="submit" value="log in" /> </form> <a t:type="pagelink" t:page="Register" href="#">Register!</a></p> </t:block> <t:block t:id="loginWithOpenID"> <p> Login with <a t:type="actionlink" t:id="refreshUsernamePasswordZone" href="#" t:zone="loginZone">username and password</a> or with OpenID </p> <form xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" action="${loginCheckUrl}" method="POST"> <t:if test="failed"> Error! <br /> </t:if> <label class="username" for="j_username">OpenID:</label> <input class="username" name="j_username" type="text" size="30" /> <input id="submit" class="submit" type="submit" value="log in" /> </form> </t:block> <t:zone t:id="loginZone"> <t:delegate to="loginWithUserNameAndPassword" /> </t:zone> </snip> Regards, Borut 2008/11/25 Jonathan Barker <[EMAIL PROTECTED]>: > > It's ugly, but you could build one of the two UserDetailServices in the > contributeProviderManager method, so only one UserDetailsService is visible > to the RememberMe service. > > >> -----Original Message----- >> From: Borut Bolčina [mailto:[EMAIL PROTECTED] >> Sent: Tuesday, November 25, 2008 07:29 >> To: Tapestry users >> Subject: Re: Authentication >> >> Hi, >> >> only now have I returned to this task. I get http error 500: >> >> Exception constructing service 'RememberMeServices': Error invoking >> service builder method >> nu.localhost.tapestry5.springsecurity.services.SecurityModule.build(UserDe >> tailsService, >> String) (at SecurityModule.java:303) (for service >> 'RememberMeServices'): Service interface >> org.springframework.security.userdetails.UserDetailsService is matched >> by 2 services: UserDetailsWithOpenIDService, >> UserDetailsWithUsernameAndPasswordService. Automatic dependency >> resolution requires that exactly one service implement the interface. >> >> AppModule.java >> =========== >> <snip> >> /* USERNAME, PASSWORD */ >> public static UserDetailsService >> buildUserDetailsWithUsernameAndPasswordService(@Inject PasswordEncoder >> encoder, @Inject SaltSource salt) { >> return new UserDetailsWithUsernameAndPasswordService(encoder, >> salt); >> } >> >> /* OPENID */ >> public static UserDetailsService buildUserDetailsWithOpenIDService() { >> return new UserDetailsWithOpenIDServiceImpl(); >> } >> >> public static OpenIDAuthenticationProvider >> buildOpenIDAuthenticationProvider( >> @InjectService("UserDetailsWithOpenIDService") >> UserDetailsService userDetailsService) throws Exception { >> OpenIDAuthenticationProvider provider = new >> OpenIDAuthenticationProvider(); >> >> provider.setUserDetailsService(userDetailsService); >> provider.afterPropertiesSet(); >> >> return provider; >> } >> >> public static void contributeProviderManager( >> OrderedConfiguration<AuthenticationProvider> configuration, >> @InjectService("OpenIDAuthenticationProvider") >> AuthenticationProvider openIdAuthenticationProvider, >> @InjectService("DaoAuthenticationProvider") >> AuthenticationProvider daoAuthenticationProvider) { >> >> configuration.add("openIDAuthenticationProvider", >> openIdAuthenticationProvider); >> configuration.add("daoAuthenticationProvider", >> daoAuthenticationProvider ); >> } >> </snip> >> >> What is missing? >> >> Cheers, >> Borut >> >> 2008/11/6 Ulrich Stärk <[EMAIL PROTECTED]>: >> > Just inject both providers into your contributeProviderManager method: >> > >> > public static void contributeProviderManager( >> > OrderedConfiguration<AuthenticationProvider> configuration, >> > @InjectService("OpenIDAuthenticationProvider") >> > AuthenticationProvider openIdAuthenticationProvider, >> > @InjectService("DaoAuthenticationProvider") >> > AuthenticationProvider daoAuthenticationProvider) { >> > >> > configuration.add("openIDAuthenticationProvider", >> > openIdAuthenticationProvider); >> > configuration.add("daoAuthenticationProvider", >> daoAuthenticationProvider >> > ); >> > } >> > >> > Cheers, >> > >> > Uli >> > >> > Borut Bolčina schrieb: >> >> >> >> Hello, >> >> >> >> I need some help/guidelines in implementing a login with classic >> username >> >> and password login and with openid. >> >> >> >> I am looking at >> >> http://www.localhost.nu/svn/public/tapestry-spring-security-sample/ for >> >> classic setup and >> >> http://wiki.apache.org/tapestry/Tapestry5HowToSpringSecurityAndOpenId >> for >> >> OpenID. >> >> >> >> My goal is to join them in one web app. Both of them work just fine >> >> separately. >> >> >> >> Now this method in AppModule is where I am stuck: >> >> >> >> public static void contributeProviderManager( >> >> OrderedConfiguration<AuthenticationProvider> configuration, >> >> @InjectService("OpenIDAuthenticationProvider") >> >> AuthenticationProvider openIdAuthenticationProvider) { >> >> >> >> configuration.add("openIDAuthenticationProvider", >> >> openIdAuthenticationProvider); >> >> } >> >> >> >> The above method is part of >> >> >> >> http://www.localhost.nu/java/tapestry-spring- >> security/apidocs/nu/localhost/tapestry5/springsecurity/services/SecurityMo >> dule.html >> >> . >> >> >> >> It allows only one authentication provider, but I need another one: >> >> >> >> public static void contributeProviderManager( >> >> OrderedConfiguration<AuthenticationProvider> configuration, >> >> @InjectService( "DaoAuthenticationProvider" ) >> >> AuthenticationProvider daoAuthenticationProvider ) { >> >> >> >> configuration.add( >> >> "daoAuthenticationProvider", >> >> daoAuthenticationProvider ); >> >> } >> >> >> >> How, if at all possible, do I configure my app with two authentication >> >> providers? >> >> >> >> Cheers, >> >> Borut >> >> >> >> P.S. I am new to T5 and T5's IoC. >> >> >> > >> > >> > --------------------------------------------------------------------- >> > To unsubscribe, e-mail: [EMAIL PROTECTED] >> > For additional commands, e-mail: [EMAIL PROTECTED] >> > >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >