On 29.10.2015 10:12, chris derham wrote:
Torsten,

Add an interceptor to AngularJS to detect the 401 and do whatever you
want, e.g. redirect to a login page. Then when you have the
credentials, submit to login rest api, get a token, and then make all
other calls passing this token.

There are loads of examples on how to do this on the internet. This
isn't tomcat specific.

function globalInterceptorResponse($injector, $q) {
     return {
         'response': function (response) {
             return response;
         },
         'responseError': function (rejection) {
             switch (rejection.status) {
...
                 case 401:
                     console.warn("Hit 401 - redirecting to login");
                     window.location = '/login';
                     break;
...
                 default:
                     console.warn(rejection);
             }
             return $q.reject(rejection);
         }
     };
}
globalInterceptorResponse.$inject = ['$injector', '$q'];

then in request config,

$httpProvider.interceptors.push(globalInterceptorResponse);

This won't work because the application doesn't get a chance to do
anything until Tomcat completes its authentication/authorization work.
If the application were handling the authentication/authorization, then
the original Filter would have worked.

-chris

Chris,

I think that you thought the above was server-side java code. The
above was javascript code that runs in the browser. It does work - I
copied it from a project I am working on now.


Hi.

I will not dispute the fact that this solution works for you, and that it could also work for Torsten. And I must say that it looks elegant, from a javascript point of view.

I will just submit a personal opinion, based on long experience, that says that any solution (for this kind of interacting-with-servers issue) which is browser-based, is always more fragile and inherently more unstable, than a solution based on normal HTTP interactions and implemented at the server side. (*) There are always little differences among browsers and browser versions, as to how they handle javascript code. And there are many things that a user can do with his browser, that can interfere with such things.
And problems on that side will always be very time-consuming to identify and 
debug.
A server-side, protocol-compliant solution on the other hand, will work with any HTTP-compliant browser (which does not necessarily include all versions of Internet Explorer), and be a lot easier to maintain.

End of opinion.

(*) with an exception for all the marvelous things which you can do with tools like jQuery, when used judiciously at the level of the browser-side presentation and user interaction.




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

Reply via email to