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 cas-user+unsubscr...@apereo.org.
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