Giriş
Bu synda web programma howpsuzlygy ýaly mowzugy ara alyp maslahatlaşmak isleýärin. Java-da howpsuzlygy üpjün edýän birnäçe tehnologiýa bar:-
" Java SE Platform Security Architecture ", has giňişleýin maglumatlary Oracle-dan Gollanmada okap bilersiňiz: " JavaTM SE Platform Security Architecture ". Bu arhitektura, Java programmalarymyzy Java SE iş şertlerinde nädip goramalydygymyzy düşündirýär. Emma bu günki söhbetdeşligimiziň mowzugy däl.
-
" Java Kriptografiýa Arhitekturasy ", maglumatlary şifrlemegi beýan edýän Java giňeltmesi. Bu giňeltme barada JavaRush-da " Java kriptografiýa arhitekturasy: ilkinji tanyş " synynda ýa-da Oracle-dan gollanma: " Java kriptografiýa arhitekturasy (JCA) salgylanma gollanmasy " -da okap bilersiňiz.
JAAS
JAAS Java SE-iň giňelmesi bolup, Java tanamak we awtorizasiýa hyzmaty (JAAS) salgylanma gollanmasynda düşündirilýär . Tehnologiýanyň adyndan görnüşi ýaly, JAAS tassyklamanyň we ygtyýarnamanyň nädip ýerine ýetirilmelidigini düşündirýär:-
" Autentifikasiýa ": Grek dilinden terjime edilen "authentikos" "hakyky, hakyky" diýmekdir. Autagny, autentifikasiýa hakykylygyň synagydyr. Kim tassyklanan bolsa, hakykatdanam kimdigini aýdýar.
-
" Awtorizasiýa ": iňlis dilinden terjime edilen "rugsat" diýmekdir. Successfulagny, awtorizasiýa üstünlikli tanamakdan soň ýerine ýetirilen giriş gözegçiligi.
- ýol ulanyjysy hökmünde adamyň wekili hökmünde sürüjilik şahadatnamasy
- pasporty, ýurduň raýaty hökmünde adamyň wekili hökmünde
- daşary ýurt pasporty, halkara gatnaşyklaryna gatnaşyjy hökmünde adamyň wekili hökmünde
- kitaphanadaky okyjy hökmünde adamyň şekili hökmünde kitaphanadaky kitaphana kartasy
Web programmasy
Şeýlelikde, bize web programmasy gerek. Gradle awtomatiki taslama gurmak ulgamy ony döretmäge kömek eder. “Gradle” -iň ulanylmagy sebäpli, kiçijik buýruklary ýerine ýetirip, Java taslamasyny zerur formatda ýygnap bileris, zerur katalog gurluşyny awtomatiki döredip bileris we başga-da köp zatlary edip bileris. Gradle hakda has gysgaça maglumat: " Gradle bilen gysgaça tanyşlyk " ýa-da " Gradle Starting " resmi resminamalarynda okap bilersiňiz . Taslamany başlamalydyrys (Başlangyç) we bu maksat bilen Gradle-de ýörite bir plugin bar: “ Gradle Init Plugin ” (Init Başlamak üçin gysga, ýatda saklamak aňsat). Bu plagini ulanmak üçin buýruk setirinde buýrugy işlediň:gradle init --type java-application
Üstünlikli tamamlanandan soň, Java taslamamyz bolar. Indi redaktirlemek üçin taslamamyzyň gurluş skriptini açalyň. build.gradle
Gurluş skripti , programma gurluşynyň nuanslaryny beýan edýän faýl . Şonuň üçin ady, skript guruň. Munuň taslama gurmak ssenarisidigini aýdyp bileris. Gradle şeýle köpugurly gural, esasy mümkinçilikleri pluginler bilen giňeldilýär. Şonuň üçin ilki bilen “pluginler” blokyna üns bereliň:
plugins {
id 'java'
id 'application'
}
Düzgüne görä, Gradle, "" kesgitlän zadymyza laýyklykda --type java-application
, käbir esasy pluginleriň toplumyny, ýagny Gradle-iň paýlanyşyna goşulan şol pluginleriň toplumyny döretdi. Gradle.org web sahypasyndaky "Resminamalar" (ýagny resminamalar) bölümine girseňiz , çep tarapda "Salgy" bölümindäki mowzuklaryň sanawynda " Esasy plaginler " bölümini görýäris, ýagny. bu gaty esasy pluginleriň beýany bilen bölüm. Gradleň biziň üçin döredenlerini däl-de, bize gerekli pluginleri saýlalyň. Resminamalara görä, " Gradle Java Plugin " deslapky kody düzmek ýaly Java kody bilen esasy amallary üpjün edýär. Şeýle hem, resminamalara laýyklykda, " Gradle programma plugin " bize "ýerine ýetirip bolýan JVM programmasy" bilen işlemek üçin gurallar bilen üpjün edýär. özbaşdak programma hökmünde işe girizilip bilinjek java programmasy bilen (mysal üçin, konsol programmasy ýa-da öz UI programmasy). Görnüşi ýaly, bize "programma" plugin gerek däl, sebäbi ... özbaşdak programma gerek däl, web programmasy gerek. Öçüreliň. Diňe şu plugin bilen belli bolan “mainClassName” sazlamasy. Mundan başga-da, Programma Plugin resminamalaryna baglanyşyk berlen şol bir " Gaplamak we paýlamak " bölüminde Gradle War Plugin-e baglanyşyk bar. Gradle War Plugin , resminamalarda görkezilişi ýaly, söweş web görnüşinde Java web programmalaryny döretmäge goldaw berýär. WAR formatynda JAR arhiwiniň ýerine WAR arhiwi dörediljekdigini aňladýar. Bu bize gerek zat ýaly. Şeýle hem, resminamalarda aýdylyşy ýaly "Uruş plugin Java pluginini giňeldýär". .Agny, java pluginini uruş plagini bilen çalşyp bileris. Şonuň üçin plugin blokymyz ahyrsoňy şeýle bolar:
plugins {
id 'war'
}
Şeýle hem "Gradle War Plugin" resminamalarynda pluginiň goşmaça "Taslama düzülişi" ulanylýandygy aýdylýar. Layout iňlis dilinden ýerleşýän ýeri hökmünde terjime edilýär. .Agny, uruş plagini, öz wezipeleri üçin ulanjak faýllaryň belli bir ýeriniň bolmagyna garaşýar. Web programma faýllaryny saklamak üçin aşakdaky katalogy ulanar: src/main/webapp
Plaginiň özüni alyp barşy şeýle düşündirilýär:
web.xml
- bu "Gurnama beýan ediji" ýa-da "ýerleşdiriş beýany". Bu, web programmamyzyň işlemegi üçin nädip sazlamalydygyny görkezýän faýl. Bu faýl, programmamyzyň haýsy haýyşlary ýerine ýetirjekdigini, howpsuzlyk sazlamalaryny we başga-da köp zady kesgitleýär. Esasy, JAR faýlyndaky aç-açan faýla birneme meňzeýär (" Manifest faýllary bilen işlemek: esaslar "). “Manifest” faýly Java programmasy (ýagny JAR arhiwi) bilen nädip işlemelidigini, web.xml bolsa Java Web Programmasy (ýagny WAR arhiwi) bilen nädip işlemelidigini aýdýar. "Gurnama beýan ediji" düşünjesi öz-özünden ýüze çykmady, ýöne " Servlet API spesifikasiýasy" resminamasynda beýan edilýär.Islendik Java web programmasy bu "Servlet API" -e baglydyr. Munuň API bolandygyna düşünmek möhümdir, ýagny käbir özara baglanyşyk şertnamasynyň beýany. Web programmalary garaşsyz programmalar däl. Web serwerinde işleýär , ulanyjylar bilen tor aragatnaşygyny üpjün edýär. webagny, web serweri web programmalary üçin bir "konteýner". Bu mantykly, sebäbi web programmasynyň logikasyny ýazmak isleýäris, ýagny ulanyjynyň haýsy sahypalary görjekdigini we nädip ulanyjynyň hereketlerine reaksiýa bildirmeli. We ulanyja habaryň nädip iberiljekdigi, baýtlaryň nädip geçiriljekdigi we beýleki pes derejeli we gaty hil talap edýän zatlar üçin kod ýazmak islemeýäris. Mundan başga-da web programmalarynyň hemmesiniň üýtgeşikdigi ýüze çykýar, ýöne maglumat geçirmek birmeňzeş. millionagny, bir million programmist şol bir maksat üçin kod ýazmaly bolýardy. Şonuň üçin web serweri ulanyjylaryň käbiriniň özara gatnaşygy üçin jogapkärdir. we maglumat alyş-çalşygy, web programmasy we dörediji şol maglumatlary döretmek üçin jogapkärdir. Bu iki bölegi birleşdirmek üçin, ýagny web serweri we web programmasy, olaryň özara gatnaşygy üçin şertnama gerek, ýagny muny etmek üçin haýsy düzgünleri berjaý ederler? Şertnamany, web programmasy bilen web serweriniň arasyndaky täsiriň nähili bolmalydygyny düşündirmek üçin Servlet API oýlanyp tapyldy. Gyzykly tarapy, Bahar ýaly çarçuwalary ulansaňyzam, kapotyň aşagynda işleýän Servlet API bar. Springagny, Bahary ulanýarsyňyz, Bahar bolsa Servlet API bilen işleýär. Netijede, web programma taslamamyz Servlet API-e bagly bolmaly. Bu ýagdaýda Servlet API garaşlylyk bolar. Bilşimiz ýaly, Gradle size taslama baglylyklaryny deklaratiw görnüşde suratlandyrmaga mümkinçilik berýär. Pluginler garaşlylygy nädip dolandyryp boljakdygyny düşündirýärler. Mysal üçin, Java Gradle Plugin "testImplementation" garaşlylygy dolandyryş usuly bilen tanyşdyrýar, bu garaşlylygyň diňe synaglar üçin zerurdygyny aýdýar. Emma “Gradle War Plugin” garaşlylygy dolandyrmak usulyny “üpjün edilenCompile” goşýar, bu garaşlylygyň web programmamyzyň WAR arhiwine goşulmajakdygyny aýdýar. Näme üçin Servlet API-ni WAR arhiwimize goşmaýarys? Sebäbi Servlet API web programmamyza web serweriniň özi tarapyndan üpjün ediler. Web serwer Servlet API bilen üpjün edýän bolsa, serwere servlet konteýner diýilýär. Şol sebäpden, Servlet API bilen üpjün etmek web serweriniň jogapkärçiligidir we ServletAPI-i diňe kod düzülen wagtynda üpjün etmek biziň jogapkärçiligimizdir. Şonuň üçin providedCompile
. Şeýlelik bilen, garaşlylyk bloky şeýle bolar:
dependencies {
providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
testImplementation 'junit:junit:4.12'
}
Şeýlelik bilen, web.xml faýlyna gaýdyp geleliň. Düzgüne görä, Gradle hiç hili ýerleşdiriş beýany döredenok, şonuň üçin muny özümiz etmeli. Geliň src/main/webapp/WEB-INF
, bir katalog döredeliň we onda XML faýly dörederis web.xml
. Indi "Java Servlet Spesifikasiýasynyň" özi we " 14-nji BAP ýerleşdiriş beýany " bölümini açalyň . "14.3 ýerleşdiriş beýany" -da aýdylyşy ýaly, ýerleşdiriş beýanynyň XML resminamasy http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd shema bilen düşündirilýär . XML shemasy resminamanyň haýsy elementlerden ybarat bolup biljekdigini we haýsy tertipde peýda bolmalydygyny görkezýär. Haýsylary hökmany we haýsylary ýok. Umuman, resminamanyň gurluşyny suratlandyrýar we XML resminamasynyň dogry düzülendigini barlamaga mümkinçilik berýär. Indi " 14.5 Mysallar " bölüminden mysal alalyň , ýöne shema 3.1 wersiýasy üçin görkezilmelidir.
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd
Boşlarymyz web.xml
şeýle bolar:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>JAAS Example</display-name>
</web-app>
Indi JAAS ulanyp gorajak serwletimizi suratlandyralyň. Ozal Gradle biziň üçin “App” synpyny döredýärdi. Geliň, ony serwete öwüreliň. " 2-nji BAP Serwet interfeýsi " -niň spesifikasiýasynda aýdylyşy ýaly , " Köp maksat bilen döredijiler öz hyzmatlaryny amala aşyrmak üçin HttpServlet-i giňelderler ", ýagny synpy servlet etmek üçin şu synpdan miras almalysyňyz HttpServlet
:
public class App extends HttpServlet {
public String getGreeting() {
return "Secret!";
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print(getGreeting());
}
}
Aýdyşymyz ýaly, Servlet API serwer bilen web programmamyzyň arasyndaky şertnama. Bu şertnama, ulanyjy serwer bilen habarlaşanda, serwer ulanyjydan obýekt görnüşinde haýyş döredip, HttpServletRequest
ony serwete geçirjekdigini düşündirmäge mümkinçilik berýär. HttpServletResponse
Şeýle hem , serwlet ulanyjy üçin oňa jogap ýazyp biler ýaly bir hyzmat bilen üpjün eder . Serwlet işlemegi gutarandan soň, serwer ulanyja esaslanan jogap berip biler HttpServletResponse
. Servagny, servlet ulanyjy bilen gönüden-göni aragatnaşyk saklamaýar, diňe serwer bilen aragatnaşyk saklaýar. Serwerimiziň serwletimiziň bardygyny we haýsy haýyşlary ulanmalydygyny bilmek üçin ýerleşdiriş beýanynda serwere bu barada aýtmalydyrys:
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>jaas.App</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/secret</url-pattern>
</servlet-mapping>
Bu ýagdaýda, ähli haýyşlar synpa laýyk gelýän /secret
bir hyzmatçy adymyza iberilmez . Öň hem aýdyşymyz ýaly, web programmasy diňe web serwerinde ýerleşdirilip bilner. Web serweri aýratyn gurup bolýar (özbaşdak). Thisöne bu gözden geçirmek üçin alternatiw wariant amatly - içerki serwerde işlemek. Bu, serweriň programma taýdan dörediljekdigini we işe giriziljekdigini aňladýar (plugin muny biziň üçin eder) we şol bir wagtyň özünde web programmamyz hem ýerleşdiriler. Gradle gurmak ulgamy " Gradle Gretty Plugin " pluginini şu maksatlar üçin ulanmaga mümkinçilik berýär :app
jaas.App
plugins {
id 'war'
id 'org.gretty' version '2.2.0'
}
Mundan başga-da, Gretty plugininiň gowy resminamalary bar . “Gretty” plugininiň dürli web serwerleriniň arasynda geçmäge mümkinçilik berýändiginden başlalyň. Bu resminamalarda has jikme-jik düşündirilýär: " Serwet gaplaryň arasynda geçmek ". Tomkata geçeliň, sebäbi ... ulanylyşynda iň meşhurlaryndan biri, şeýle hem gowy resminamalary we köp mysallary we analiz edilen meseleleri bar:
gretty {
// Переключаемся с дефолтного Jetty на Tomcat
servletContainer = 'tomcat8'
// Укажем Context Path, он же Context Root
contextPath = '/jaas'
}
Indi "gradle appRun" işledip bileris, soňra web programmamyz http: // localhost: 8080 / jaas / secret
Hakyky tanamak
Hakyky tanamak sazlamalary köplenç iki bölekden durýar: serwer tarapyndaky sazlamalar we bu serwerde işleýän web programmasynyň tarapyndaky sazlamalar. Web programmasynyň howpsuzlyk sazlamalary, web programmasy web serweri bilen täsirleşip bilmeýän başga bir sebäp bolmasa, web serweriniň howpsuzlyk sazlamalary bilen täsirleşip bilmeýär. Tomkata geçendigimiz biderek däldi, sebäbi ... Tomkatyň gowy beýan edilen arhitekturasy bar (" Apache Tomcat 8 Arhitektura " serediň). Bu arhitekturanyň beýanyndan Tomkatyň web serweri hökmünde web programmasyny “ Tomcat konteksti ” diýlip atlandyrylýan belli bir kontekst hökmünde görkezýändigi aýdyňdyr. Bu kontekst, her bir web programmasynyň beýleki web programmalaryndan üzňeleşdirilen öz sazlamalaryna eýe bolmagyna mümkinçilik berýär. Mundan başga-da, web programmasy bu kontekstiň sazlamalaryna täsir edip biler. Çeýe we amatly. Has çuňňur düşünmek üçin " Tomcat kontekst konteýnerlerine düşünmek " makalasyny we Tomkat resminamalar bölümini " Kontekst konteýner " okamagy maslahat berýäris. Aboveokarda aýdylyşy ýaly, web programmamyz, a ulanyp, programmamyzyň Tomcat kontekstine täsir edip biler/META-INF/context.xml
. We täsir edip biljek iň möhüm sazlamalarymyzyň biri Howpsuzlyk ýerleri. Howpsuzlyk ýerleri “howpsuzlyk sebiti”. Belli bir howpsuzlyk sazlamalary görkezilen ýer. Şoňa laýyklykda Howpsuzlyk Realm ulanylanda bu Realm üçin kesgitlenen howpsuzlyk sazlamalaryny ulanýarys. Howpsuzlyk ýerleri konteýner tarapyndan dolandyrylýar. web programmamyz däl, web serweri. Programmamyza haýsy howpsuzlyk çäginiň giňeldilmelidigini diňe serwere aýdyp bileris. " Realm komponenti " bölümindäki Tomkat resminamalary, Realm-y ulanyjylar we autentifikasiýany ýerine ýetirmekdäki rollary baradaky maglumatlary ýygnaýar. Tomcat, “ Jaas Realm ” atly dürli Howpsuzlyk Realm ýerine ýetiriş toplumyny hödürleýär . Biraz terminologiýa düşünenimizden soň, faýldaky Tomkat kontekstini suratlandyralyň /META-INF/context.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="JaasLogin"
userClassNames="jaas.login.UserPrincipal"
roleClassNames="jaas.login.RolePrincipal"
configFile="jaas.config" />
</Context>
appName
- anketanyň ady. Tomcat bu ady görkezilen atlar bilen deňeşdirmäge synanyşar configFile
. configFile
- bu "giriş konfigurasiýa faýly". Muňa mysal JAAS resminamalarynda görmek bolýar: " Goşundy B: Mysal üçin giriş konfigurasiýalary ". Mundan başga-da, bu faýlyň ilki çeşmelerde gözlenmegi möhümdir. Şonuň üçin web programmamyz bu faýly özi üpjün edip biler. Sypatlar userClassNames
we roleClassNames
ulanyjynyň direktoryny görkezýän synplary görkezýär. JAAS "ulanyjy" we "rol" düşünjelerini iki dürli manyda bölýär java.security.Principal
. Aboveokardaky synplary suratlandyralyň. Ulanyjy direktory üçin iň ýönekeý durmuşa geçiriş döredeliň:
public class UserPrincipal implements Principal {
private String name;
public UserPrincipal(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
}
Edil şol bir ýerine ýetirişi takyk gaýtalarys RolePrincipal
. Interfeýsden görnüşi ýaly, direktor üçin esasy zat, direktoryň adyny görkezýän käbir ady (ýa-da şahsyýetnamany) saklamak we yzyna gaýtarmak. Indi, Howpsuzlyk meýdany bar, esasy synplarymyz bar. Faýly " configFile
" atributyndan doldurmak galýar, aka login configuration file
. Onuň düşündirişini Tomkat resminamalarynda tapyp bilersiňiz: " Realm komponenti ".
\src\main\resources\jaas.config
Geliň, bu faýlyň mazmunyny belläliň:
JaasLogin {
jaas.login.JaasLoginModule required debug=true;
};
context.xml
Şol bir atyň şu ýerde we içinde ulanylýandygyny bellemelidiris . Bu, Howpsuzlyk ýerini LoginModule kartalaşdyrýar. Şeýlelikde, Tomkat Kontekst haýsy synplaryň direktorlary aňladýandygyny, şeýle hem LoginModule ulanmalydygyny aýtdy. Biziň etmeli zadymyz, bu LoginModule durmuşa geçirmek. LoginModule , JAAS-da iň gyzykly zatlaryň biridir. Resmi resminamalar LoginModule: " Java tanamak we awtorizasiýa hyzmaty (JAAS): LoginModule dörediji gollanma " -ny ösdürmäge kömek eder . Giriş modulyny durmuşa geçireliň. Interfeýsi amala aşyrýan synp döredeliň LoginModule
:
public class JaasLoginModule implements LoginModule {
}
Ilki bilen başlangyç usulyny suratlandyrýarys LoginModule
:
private CallbackHandler handler;
private Subject subject;
@Override
public void initialize(Subject subject, CallbackHandler callbackHandler, <String, ?> sharedState, Map<String, ?> options) {
handler = callbackHandler;
this.subject = subject;
}
Bu usul tygşytlar Subject
, mundan beýläk tassyklap, direktorlar hakda maglumatlary doldurarys. CallbackHandler
Şeýle hem , bize berlen geljekde ulanmak üçin tygşytlarys . Kömek bilen, CallbackHandler
biraz soň tanamaklyk temasy barada dürli maglumatlary sorap bileris. Bu hakda has giňişleýin CallbackHandler
resminamalaryň degişli bölüminde okap bilersiňiz: " JAAS salgylanma gollanmasy: CallbackHandler ". login
Ondan soň tanamak usuly ýerine ýetirilýär Subject
. Bu tassyklamagyň birinji tapgyry:
@Override
public boolean login() throws LoginException {
// Добавляем колбэки
Callback[] callbacks = new Callback[2];
callbacks[0] = new NameCallback("login");
callbacks[1] = new PasswordCallback("password", true);
// При помощи колбэков получаем через CallbackHandler логин и пароль
try {
handler.handle(callbacks);
String name = ((NameCallback) callbacks[0]).getName();
String password = String.valueOf(((PasswordCallback) callbacks[1]).getPassword());
// Далее выполняем валидацию.
// Тут просто для примера проверяем определённые значения
if (name != null && name.equals("user123") && password != null && password.equals("pass123")) {
// Сохраняем информацию, которая будет использована в методе commit
// Не "пачкаем" Subject, т.к. не факт, что commit выполнится
// Для примера проставим группы вручную, "хардcodeно".
login = name;
userGroups = new ArrayList<String>();
userGroups.add("admin");
return true;
} else {
throw new LoginException("Authentication failed");
}
} catch (IOException | UnsupportedCallbackException e) {
throw new LoginException(e.getMessage());
}
}
login
Üýtgetmeli däldiris Subject
. Şeýle üýtgeşmeler diňe tassyklama usulynda bolup geçmeli commit
. Ondan soň, üstünlikli tassyklamany tassyklamagyň usulyny beýan etmeli:
@Override
public boolean commit() throws LoginException {
userPrincipal = new UserPrincipal(login);
subject.getPrincipals().add(userPrincipal);
if (userGroups != null && userGroups.size() > 0) {
for (String groupName : userGroups) {
rolePrincipal = new RolePrincipal(groupName);
subject.getPrincipals().add(rolePrincipal);
}
}
return true;
}
Usuly aýyrmak geň bolup biler login
we commit
. Theöne esasy zat, giriş modullaryny birleşdirip bolar. Üstünlikli tassyklamak üçin birnäçe giriş modullarynyň üstünlikli işlemegi zerur bolup biler. Diňe ähli zerur modullar işlän bolsa, üýtgeşmeleri saklaň. Bu tassyklamagyň ikinji tapgyry. Geliň, usullary abort
we usullary bilen gutaralyň logout
:
@Override
public boolean abort() throws LoginException {
return false;
}
@Override
public boolean logout() throws LoginException {
subject.getPrincipals().remove(userPrincipal);
subject.getPrincipals().remove(rolePrincipal);
return true;
}
Usul abort
tassyklamagyň birinji tapgyry şowsuz bolanda çagyrylýar. Usul logout
ulgamdan çykanda diýilýär. Özümizi durmuşa geçirip Login Module
, ony düzenimizden soň, indi belli birini ulanmak isleýändigimizi Security Realm
görkezmeli : web.xml
Login Config
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>JaasLogin</realm-name>
</login-config>
Howpsuzlyk meýdanymyzyň adyny kesgitledik we tanamak usulyny - BASIC kesgitledik. Bu, " 13.6 Autentifikasiýa " bölüminde Servlet API-de beýan edilen tanamaklygyň görnüşlerinden biridir . Galan n
GO TO FULL VERSION