Hi again,

I have just dig deeper in the source code, and I found the way to extract 
the *service URL*, here how it can be done in CAS 5.2.0-RC4 (I am too lazy 
to test it in other version, please change the code accordingly)


public class CustomAuthenticationHandler implements AuthenticationHandler {

    protected PrincipalFactory principalFactory = new 
DefaultPrincipalFactory();

    @Autowired
    PropertiesConfiguration propertiesConfiguration;
    private transient Logger logger = 
LoggerFactory.getLogger(this.getClass());

   
    @Override
    public HandlerResult authenticate(Credential credential) throws 
GeneralSecurityException, PreventedException {

        UsernamePasswordCredential usernamePasswordCredential = 
(UsernamePasswordCredential) credential;
       // Here I would like to have access to the encoded address


        final RequestContext context = 
RequestContextHolder.getRequestContext();
        final WebApplicationService service = WebUtils.getService(context); 
//WebUtils use the CAS one

        *String theUrlThatYouNeed = service.getId();*
        //Of course you need to extract the hostname from the url
   }

*Additional Info:*
I will also shows you the steps I acquire this information, so you might 
reference if you want.
1) I search all types of AuthenticationHandler and see if any of them is 
using the serviceParam url
2) I sumble accross this class *YubiKeyAuthenticationHandler *(actually, I 
don't know what this handler does... but it doesn't matter much)
3) I see that it uses RequestContext, so I immediate see what this class 
does (Since I know request context -> GET parameter -> service parameter -> 
goal)
4) I see that with RequestContext, I can get WebApplicationService and 
Service
https://github.com/apereo/cas/blob/master/api/cas-server-core-api-authentication/src/main/java/org/apereo/cas/authentication/principal/Service.java
5) I see this line *final String serviceUrl = 
URLDecoder.decode(service.getId(), StandardCharsets.UTF_8.name());* 
6) hence I know the I can use service.getId() to get the service URL

Hope this helps you!

-Andy

On Monday, 27 November 2017 06:50:25 UTC+8, Andy Ng wrote:
>
> In that case, I would suggest using a custom template. And make all the 
> username, password parameters to be hidden. Or maybe create a <span> 
> loading 
> ... </span> so user know they are being redirected.
>
> Here are how to set up custom template:
> https://groups.google.com/a/apereo.org/forum/m/#!topic/cas-user/k-yfoou7Zy0
>
> See if that helps you.
>
> - Andy
>
>

-- 
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
--- 
You received this message because you are subscribed to the Google Groups "CAS 
Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/a/apereo.org/d/msgid/cas-user/1618ae69-d656-4ea6-a79e-7fb3c219cf38%40apereo.org.

Reply via email to