Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Аутентификация в фильтре


Автор: sith 4.1.2008, 13:50
вот есть такая задача... нужно сделать аутентификацию для конкретного ресурса... работать должно так... пользователь делает запрос, для ресурса который сконфигурирован в томкате как такой что подлежит аутентификации... конфегурируеться таким образом

Код

<security-constraint>

        <web-resource-collection>
            <web-resource-name>TEST</web-resource-name>
            <url-pattern>/test1</url-pattern>
            <http-method>PROPFIND</http-method>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
        </web-resource-collection>

        <auth-constraint>
            <role-name>sith</role-name>
        </auth-constraint>
        
    </security-constraint>

    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>default</realm-name>
    </login-config>


... в этом примере меня не устраивает то что роли беруться из конфига томката... а как мне сделать так что бы из таблицы в  БД брались... ???


Автор: Alexis 4.1.2008, 14:03
А причем здесь фильтр?

Цитата(sith @  4.1.2008,  13:50 Найти цитируемый пост)
в этом примере меня не устраивает то что роли беруться из конфига томката... а как мне сделать так что бы из таблицы в  БД брались... ???

http://tomcat.apache.org/tomcat-5.5-doc/realm-howto.html#JDBCRealm

Автор: vzf 4.1.2008, 17:05
Alexis правильно тебе ссылку дает smile Настрой контекст твоего приложения так, чтобы использовался JDBCRealm для аутентификации. В доках томката довольно подробно написано как это сделать.

Автор: sith 4.1.2008, 22:27
бальшое спасибо... заработало...smile

Автор: sith 4.1.2008, 22:52
хотя есть еще у меня один вопрос... получаеться там есть два варианта аутентификации - первый, который у меня работает, это когда я непосредсвенно указываю базу данных и драйвер к ней... 
Код

<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
      driverName="com.mysql.jdbc.Driver"
   connectionURL="jdbc:mysql://localhost/site_db?user=root&amp;password=cj.p lt,bkjd"
       userTable="users" userNameCol="user_name" userCredCol="user_pass"
   userRoleTable="user_roles" roleNameCol="role_name"/>


... но он не очень удобен так как указанная база данных используеться и в других сервлетах моего преложения... она получаеться уже прописанна в context.xml  моего томката... 
Код

<Context path="/" docBase="siteDB"
        debug="5" reloadable="true" crossContext="true">    

  <Resource name="jdbc/siteDB" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="root" password="cj.p lt,bkjd" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/site_db?autoReconnect=true"/>

</Context>

... следовательно можно использовать следующий вариант аутентификации
Код

<Realm className="org.apache.catalina.realm.DataSourceRealm" debug="99"
   dataSourceName="jdbc/siteDB"
   userTable="users" userNameCol="user_name" userCredCol="user_pass"
   userRoleTable="user_roles" roleNameCol="role_name"/>


но и тут начинаються баги... томкат выдает исклюение 

Код

SEVERE: Exception performing authentication
javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
    at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    at org.apache.catalina.realm.DataSourceRealm.open(DataSourceRealm.java:402)
    at org.apache.catalina.realm.DataSourceRealm.authenticate(DataSourceRealm.java:283)
    at org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:181)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
    at java.lang.Thread.run(Thread.java:619)


что я делаю не так?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)