I did it, this not solve my error:

Here is my filter definition

Tcharlie wrote:
> 
>  <filter>
>         <filter-name>JSecurityFilter</filter-name>
>        
> <filter-class>org.jsecurity.web.servlet.JSecurityFilter</filter-class>
>         <init-param>
>             <param-name>config</param-name>
>             <param-value>
>                 [main]
>                  securityManager = org.jsecurity.web.WebRememberMeManager
>                 realmA = realm.XaKiRealm
>                 
>                 [filters]
>                 authc =
> org.jsecurity.web.filter.authc.PassThruAuthenticationFilter
>                 authc.successUrl = /jsp/logon.jsp
>                 authc.loginUrl = /jsp/logon.jsp
>                 roles.unauthorizedUrl = /jsp/accessdenied.html
> 
>                 [urls]
>                       /jsp/cardmgmt.jsp = authc,
> perms[urls:/jsp/cardmgmt.*:access]
>                       /jsp/newscorner.html = authc,
> perms[urls:/jsp/newscorner.html:access] 
>                       /jsp/changepwd.jsp = authc,
> perms[urls:/jsp/changepwd.*:access]
>             </param-value>
>         </init-param>
>     </filter>
> 

My first jsp: 

Tcharlie wrote:
> 
> <ul>
>                       <li> logon.jsp The Logon/Logoff page </li>
>                       <li> changepwd.jsp The Change Password page </li>
>                       <li> cardmgmt The Card Management page </li>
>                       <li> newscorner.html Employee News Corner </li>
>               </ul> 
> 

My realm:

Tcharlie wrote:
> 
> public class XaKiRealm extends AuthorizingRealm {
>       @Override
>       protected AuthorizationInfo doGetAuthorizationInfo(
>                       PrincipalCollection principals) {
> 
>               if (principals == null) {
>                       throw new AuthorizationException(
>                                       "Les attributs utilisateurs ne doit pas 
> être vide.");
>               }
>               SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
>               try {
>                       info.setStringPermissions(PermissionResolver
>                                       .resolvePermissions(((Group) 
> principals.asList().get(2))));
>               } catch (NamingException e) {
>                       e.printStackTrace();
>               }
>               return info;
>       }
> 
>       @Override
>       protected AuthenticationInfo doGetAuthenticationInfo(
>                       AuthenticationToken arg0) throws 
> AuthenticationException {
>               UserPasswordMandatorAuthenticator auth = new
> UserPasswordMandatorAuthenticator();
>               try {
>                       AuthenticationReply r = auth
>                                       
> .authenticate((UsernamePasswordMandatorToken) arg0);
>                       return r;
>               } catch (UnsupportedCredentialException e) {
>                       throw new UnsupportedTokenException(e.getMessage());
>               } catch (AccessTimeException e) {
>                       throw new ExcessiveAttemptsException(e.getMessage());
>               } catch (LockedByAdminException e) {
>                       throw new LockedAccountException(e.getMessage());
>               } catch (LockedExpiredPasswordException e) {
>                       throw new ExpiredCredentialsException(e.getMessage());
>               } catch (LockedInvalidPasswordException e) {
>                       throw new IncorrectCredentialsException(e.getMessage());
>               } catch (net.atos.xa.rm.AuthenticationException e) {
>                       throw new AuthenticationException(e.getMessage());
>               } catch (NamingException e) {
>                       throw new ConcurrentAccessException(e.getMessage());
>               } catch (UserNameValidationException e) {
>                       throw new UnknownAccountException(e.getMessage());
>               }
>       }
> 
>       @Override
>       public final boolean supports(final AuthenticationToken token) {
>               boolean supported = false;
>               if 
> (token.getClass().equals(UsernamePasswordMandatorToken.class)) {
>                       supported = true;
>               }
>               return supported;
>       }
> }
> 

and finally my token:


Tcharlie wrote:
> 
> 
> public class UsernamePasswordMandatorToken implements
> InetAuthenticationToken,
>               RememberMeAuthenticationToken {
> 
>       private static final long serialVersionUID = 1L;
> 
>       // constructeur par defaut
>       public UsernamePasswordMandatorToken() {
>               rememberMe = false;
>       }
> 
>       // constructeurs avec arguments
>       public UsernamePasswordMandatorToken(String username, char password[],
>                       String mandator) {
>               this(username, password, mandator, false, null);
>       }
> 
>       public UsernamePasswordMandatorToken(String username, String password,
>                       String mandator) {
>               this(username, password == null ? null : password.toCharArray(),
>                               mandator, false, null);
>       }
> 
>       public UsernamePasswordMandatorToken(String username, char password[],
>                       String mandator, InetAddress inetAddress) {
>               this(username, password, mandator, false, inetAddress);
>       }
> 
>       public UsernamePasswordMandatorToken(String username, String password,
>                       String mandator, InetAddress inetAddress) {
>               this(username, password == null ? null : password.toCharArray(),
>                               mandator, false, inetAddress);
>       }
> 
>       public UsernamePasswordMandatorToken(String username, char password[],
>                       String mandator, boolean rememberMe) {
>               this(username, password, mandator, rememberMe, null);
>       }
> 
>       public UsernamePasswordMandatorToken(String username, String password,
>                       String mandator, boolean rememberMe) {
>               this(username, password == null ? null : password.toCharArray(),
>                               mandator, rememberMe, null);
>       }
> 
>       // Constructeur effectif
>       public UsernamePasswordMandatorToken(String username, char password[],
>                       String mandator, boolean rememberMe, InetAddress 
> inetAddress) {
>               this.rememberMe = false;
>               this.username = username;
>               this.password = password;
>               this.mandator = mandator;
>               this.rememberMe = rememberMe;
>               this.inetAddress = inetAddress;
>       }
> 
>       public UsernamePasswordMandatorToken(String username, String password,
>                       String mandator, boolean rememberMe, InetAddress 
> inetAddress) {
>               this(username, password == null ? null : password.toCharArray(),
>                               mandator, rememberMe, inetAddress);
>       }
> 
>       // getters & setters
>       public String getUsername() {
>               return username;
>       }
> 
>       public void setUsername(String username) {
>               this.username = username;
>       }
> 
>       public char[] getPassword() {
>               return password;
>       }
> 
>       public void setPassword(char password[]) {
>               this.password = password;
>       }
> 
>       public String getMandator() {
>               return mandator;
>       }
> 
>       public void setMandator(String mandator) {
>               this.mandator = mandator;
>       }
> 
>       public InetAddress getInetAddress() {
>               return inetAddress;
>       }
> 
>       public void setInetAddress(InetAddress inetAddress) {
>               this.inetAddress = inetAddress;
>       }
> 
>       public boolean isRememberMe() {
>               return rememberMe;
>       }
> 
>       public void setRememberMe(boolean rememberMe) {
>               this.rememberMe = rememberMe;
>       }
> 
>       // Override: retourne la liste des principals
>       public Object getPrincipal() {
>               List<String> res = new ArrayList<String>();
>               res.add(getUsername());
>               res.add(getMandator());
>               return res;
>       }
> 
>       // Override: retourne la liste des credentials
>       public Object getCredentials() {
>               return getPassword();
>       }
> 
>       // Vide le token
>       public void clear() {
>               username = null;
>               inetAddress = null;
>               rememberMe = false;
>               if (password != null) {
>                       for (int i = 0; i < password.length; i++)
>                               password[i] = '\0';
> 
>                       password = null;
>               }
>               mandator = null;
>       }
> 
>       public String toString() {
>               StringBuffer sb = new StringBuffer();
>               sb.append(getClass().getName());
>               sb.append(" - ");
>               sb.append(username);
>               sb.append(", rememberMe=").append(rememberMe);
>               if (inetAddress != null)
>                       sb.append(" (").append(inetAddress).append(")");
>               sb.append("-mandator:");
>               sb.append(mandator);
>               return sb.toString();
>       }
> 
>       private String username;
>       private char password[];
>       private boolean rememberMe;
>       private InetAddress inetAddress;
>       private String mandator;
> }
> 

CardManagement authorization works because it's done via servlet.
But newscorner results in 401 error because it's done via direct link (< A
href >).

Do you see something going wrong?

Regards, see you tomorrow (end of work for me^^), Tcharlie




Les Hazlewood-2 wrote:
> 
> If that is the case, you will want to redefine 'authc' to be the
> PassthroughAuthenticationFilter.  This will allow the standard 'authc'
> behavior, but requires you to implement your own Form and Form
> controller (which you have already done):
> 
> [main]
> authc = org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter
> authc.loginUrl = /path/to/login.jsp
> authc.successUrl = /path/after/successful/login
> 
> That should do the trick.
> 
> Cheers,
> 
> Les
> 
> On Mon, Jul 20, 2009 at 11:13 AM, Tcharlie<[email protected]> wrote:
>>
>>
>>
>> Les Hazlewood-2 wrote:
>>>
>>>>> How is does the user authenticate with your application?  Do they fill
>>>>> in and submit a form or are you using Basic HTTP Authentication or
>>>>> some other method?
>>>>>
>>>>>
>>>>
>>>> I've got a jsp form to authenticate my users. the link is good because
>>>> if
>>>> my
>>>> user is not authenticated, he is redirected on my login page
>>>
>>> You need to tell the authentication filter what your login url is so
>>> it knows where to redirect if a user is not authenticated:
>>>
>>> [main]
>>> authc.loginUrl = /some/path/to/login.jsp
>>>
>>> Cheers,
>>>
>>> Les
>>>
>>>
>>
>> It's already done and it works fine.
>>
>> I forgot to precise that I can't use the  FormAuthenticationFilter (I
>> don't
>> know wich filter you put as default)r, because my authentication token
>> encloses 3 params (username, password and mandator, wich represent the
>> authorisation context (toto may be the hsbc chairman (full application
>> access), but Citybank customer (restricted access)).
>> My realm supports this token but FormAuthenticationFilter throws a
>> listenerstart error if I use it.
>>
>> Unfortunately, the link I have to clic on is not hidden to the
>> unauthorized
>> users resulting an access permitted by ki when I clic on, but a
>> " Etat HTTP 401 -
>>
>> type Rapport d'�tat
>>
>> message
>>
>> description La requ�te n�cessite une authentification HTTP ().
>> Apache Tomcat/6.0.18"
>>
>> Error.
>> I deduce that ki allowed me to pass (I wasn't redirected on login page)
>> and
>> challenged my http Headers. Due to the fact that I don't have the
>> authentication header (I lost it when I clicked on the link), the server
>> doesn't allow me see my page...
>> --
>> View this message in context:
>> http://n2.nabble.com/BasicHttpHeader-and-jsp-links-tp3288699p3289410.html
>> Sent from the Shiro User mailing list archive at Nabble.com.
>>
> 
> 

-- 
View this message in context: 
http://n2.nabble.com/BasicHttpHeader-and-jsp-links-tp3288699p3289577.html
Sent from the Shiro User mailing list archive at Nabble.com.

Reply via email to