Tanks you, that's work perfect

Found in
http://ostas.blogspot.com/2008/06/spring-security-20-different-target.html
too

Here's my solution :

A CustomAuthenticationProcessingFilter :

public class CustomAuthenticationProcessingFilter extends
        AuthenticationProcessingFilter {
    @Override
    public Authentication attemptAuthentication(HttpServletRequest request)
            throws AuthenticationException {
        String username = obtainUsername(request);
        String password = obtainPassword(request);

        if (username == null) {
            username = "";
        }

        if (password == null) {
            password = "";
        }

        username = username.trim();

        UsernamePasswordAuthenticationToken authRequest = new
UsernamePasswordAuthenticationToken(username, password);

        // Place the last username attempted into HttpSession for views
        HttpSession session = request.getSession(false);


        if (session != null || getAllowSessionCreation()) {
           
request.getSession().setAttribute(SPRING_SECURITY_LAST_USERNAME_KEY,
TextUtils.escapeEntities(username));
        }

        // Allow subclasses to set the "details" property
        setDetails(request, authRequest);

        // role&URLs stuff
        final Authentication auth =
this.getAuthenticationManager().authenticate(authRequest);
        final GrantedAuthority[] grantedAuthorities = auth.getAuthorities();

        String currentRole = null;
        String outcome = null;
       
        for (GrantedAuthority grantedAuthority : grantedAuthorities) {
            currentRole = grantedAuthority.toString();
        }
       
        if (WebUser.ROLE_ADMIN.equals(currentRole)) {
            outcome = "/anonym/etude/accueil";
        } else if (WebUser.ROLE_COMMISSAIRE_PRISEUR.equals(currentRole)) {
            outcome = "/anonym/actif/accueil";           
        } else if (WebUser.ROLE_CREANCIER.equals(currentRole)) {
            outcome = "/anonym/creancier/accueil";           
        } else if (WebUser.ROLE_DIRIGEANT.equals(currentRole)) {
            outcome = "/anonym/dirigeant/accueil";           
        } else if (WebUser.ROLE_SALARIE.equals(currentRole)) {
            outcome = "/anonym/salarie/accueil";           
        } else {
            outcome = "/start";
        }
       
        // actual change of default url for user
        this.setDefaultTargetUrl(outcome);

        return auth;
    }


In AppModule :

    public static AuthenticationProcessingFilter
buildMyAuthenticationProcessingFilter(
            @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 {
        CustomAuthenticationProcessingFilter filter = new
CustomAuthenticationProcessingFilter();
        filter.setAuthenticationManager(manager);
        filter.setAuthenticationFailureUrl(failureUrl);
        filter.setDefaultTargetUrl(targetUrl);
        filter.setFilterProcessesUrl(authUrl);
        filter.setRememberMeServices(rememberMeServices);
        filter.setAlwaysUseDefaultTargetUrl(true);
        filter.afterPropertiesSet();
        return filter;
    }



Le 04/12/2009 12:35, Juan E. Maya a écrit :
> hi, i did something like this for one of my past projects.
>
> Specifically what i did was to create my own
> AuthenticationProcessingFilter that overrides getDefaultTargetUrl()
>
> The methods looks like this:
>
> @override
> public String getDefaultTargetUrl() {
>               String url = this.afterLoginRedirectService.getDefaultUrl();
>               if (StringUtils.isBlank(url)){
>                       url = super.getDefaultTargetUrl();
>               }
>               return url;
>       }
>
> afterLoginRedirectService is a tapestry service that obtains the url
> to redirect after the authentication process is done. It has a
> configuration map with the Role and the target url;
>
> And then you need to override the authenticationProcessingFilter
> provieded by  tapestry-spring-security
>
> public static AuthenticationProcessingFilter
> buildYourAuthenticationProcessingFilter(Map<Long, String>
> configuration, Logger logger,
>                       @SpringSecurityServices final AuthenticationManager 
> manager,
> @SpringSecurityServices final RememberMeServices rememberMeServices,
>                       @Inject @Symbol("spring-security.check.url") final 
> String authUrl,
> @Inject @Symbol("spring-security.target.url") final String targetUrl,
>                       @Inject @Symbol("spring-security.failure.url") final 
> String
> failureUrl, @InjectService("SuccessLoginChain") LoginActionCommand
> successLoginChain,
>                       @InjectService("FailedLoginChain") LoginActionCommand
> failedLoginChain) throws Exception {
>
>               AuthenticationProcessingFilter filter = new
> YourAuthenticationProcessingFilter(successLoginChain,
> failedLoginChain,
>                               new 
> AfterLoginRedirectServiceImpl(configuration), logger);
>
>               filter.setAuthenticationManager(manager);
>               filter.setAuthenticationFailureUrl(failureUrl);
>               filter.setDefaultTargetUrl(targetUrl);
>               filter.setFilterProcessesUrl(authUrl);
>               filter.setRememberMeServices(rememberMeServices);
>               filter.afterPropertiesSet();
>               return filter;
>       }
>
> public static void
> contributeAliasOverrides(Configuration<AliasContribution<?>>
> configuration,
>                       @InjectService("YourAuthenticationProcessingFilter")
> AuthenticationProcessingFilter yourAuthenticationProcessingFilter) {
>
>               //rewrite the authentication processing filter
>               
> configuration.add(AliasContribution.create(AuthenticationProcessingFilter.class,
> yourAuthenticationProcessingFilter));
>
>       }
>
> And to configure the target urls in any module u can contribute to
> your Filter :
> public static void
> contributeYourAuthenticationProcessingFilter(MappedConfiguration<Long,
> String> configuration,
>                       @Inject 
> @Symbol(NebulaConstants.Symbols.DEFAULT_ADVISOR_URL) String
> defaultAdvisorUrl) {
>
>               configuration.add(SecurityConstants.Defaults.ADVISOR_ROLE_ID,
> defaultAdvisorUrl);
>       }
>
> I hope it helps
>
> On Fri, Dec 4, 2009 at 12:06 PM, TNO <tno...@free.fr> wrote:
>   
>> Hi,
>>
>> is it possible to have different target urls for different user roles.
>>
>> The ROLE_ADMIN goes to /admin, the ROLE_TOTO goes /page/toto, the
>> ROLE_TITI goes to /page/titi, ...
>>
>>
>> thanks
>>
>>
>> ---
>> Antivirus avast! : message Sortant sain.
>> Base de donnees virale (VPS) : 091203-1, 03/12/2009
>> Analyse le : 04/12/2009 12:06:56
>> avast! - copyright (c) 1988-2009 ALWIL Software.
>> http://www.avast.com
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>
>>
>>     
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>
>   


---
Antivirus avast! : message Sortant sain.
Base de donnees virale (VPS) : 091203-1, 03/12/2009
Analyse le : 04/12/2009 13:29:53
avast! - copyright (c) 1988-2009 ALWIL Software.
http://www.avast.com




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to