Hari ini, saya menghadapi masalah tamat masa tetapan dalam projek Perubahan application.properties dalam SpringBoot2 tidak pernah berkuat kuasa.
Bekas terbenam yang digunakan oleh Spring Boot dikawal oleh pelayan.* sifat. Spring Boot akan mencipta contoh bekas servlet menggunakan salah satu contoh ServletWebServerFactory. Kelas ini menggunakan atribut pelayan.* untuk mengkonfigurasi bekas servlet terurus (seperti Tomcat, Jetty, dsb.).
Apabila aplikasi dibungkus sebagai fail perang dan digunakan pada contoh Tomcat, atribut pelayan.* tidak boleh digunakan. Ini tidak terpakai kerana bekas servlet pra-dibuat boleh digunakan (kerana perkhidmatan berjalan dari jauh). Oleh itu, menggunakan ke Tomcat jauh akan menyebabkan pelayan.* sifat tidak berguna.
server: servlet: session: timeout: PT1H # 1小时过期 cookie: max-age: PT1H # 1小时过期
Nota : PT1H bermaksud masa untuk menetapkan tamat sesi ialah 1 jam.
Sambungan: Tempoh
Temui kaedah setTimeouot dengan melihat kod sumber springboot Di sini, contoh Tempoh diperlukan untuk dihantar.
public void setTimeout(Duration timeout) { this.timeout = timeout; }
Tempoh baharu dalam. Java8 dan digunakan terutamanya untuk pengiraan Perbezaan tarikh, Tempoh diisytiharkan muktamad dan selamat untuk benang.
Jika anda menukar rentetan, ia serupa dengan kaedah pemformatan tarikh SimpleDateFormat
Rentetan jangka masa adalah serupa dengan nombor, iaitu positif dan negatif: lalai adalah positif, dan negatif bermula dengan '-', diikuti dengan Kemudian 'PT', huruf masa berikut:
'D' - hari
'H' - jam
'M' - Minit
'S' - Seconds
Setiap unit mesti bermula dengan nombor, dan jam dan minit Susunan saat tidak boleh dikacau, contohnya: PT2H3M2S adalah sama dengan -PT-2H-3M-2S.
1) Dalam direktori conf tomcat, tukar servler.xml:
<Context path="/abtest" docBase="/abtest" defaultSessionTimeOut="3600" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/>
2) Tukar web.xml dalam projek :
<session-config> <session-timeout>20</session-timeout> </session-config>
3) Tukar
session.setMaxInactiveInterval(30*60);
dalam program Apabila anda menghadapi masalah yang sama, sila baca huruf merah di atas dan selesaikan masalah mengikut urutan.
Kod ujian:
@RestController @RequestMapping("/valid-time") public class TestController { @GetMapping("/test") public String validTime(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); int sessionTime = session.getMaxInactiveInterval(); return new StringBuilder("sessionTime=").append(sessionTime).toString(); } }
Lubang besar yang disebabkan oleh penyegerakan yang tidak disegerakkan masa pelayan Linux menyebabkan kegagalan sesi Spring
Disebabkan keperluan perniagaan, persekitaran berdiri sendiri asal telah ditukar kepada persekitaran kluster Untuk tidak mengubah suai tugas, sesi musim bunga + redis dipilih sebagai penyelesaian perkongsian sesi.
Selepas mengesahkan penyelesaian teknikal, saya mencari banyak maklumat tentang sesi musim bunga di Internet Selepas membacanya dan tidak menemui sebarang kesilapan oleh orang terdahulu, saya mula mengusahakannya.
Proses pemasangan redis diabaikan.
Tambah sesi musim bunga pada projek langkah demi langkah mengikut maklumat Projek nod tunggal berjalan dengan jayanya tanpa sebarang ralat dan sesi telah berjaya ditulis ke redis.
Kemudian demi keselamatan, saya memasang nginx pada komputer saya dan menggunakan 3 tomcat Semuanya kelihatan sempurna, dan perkongsian sesi telah selesai antara berbilang nod.
Semua persiapan awal telah selesai setakat ini, dan langkah terakhir hanya tinggal.
Mimpi ngeri bermula...
Lengkapkan penggunaan semua nod dalam talian, dan kemudian buka penyemak imbas untuk berjaya mengakses aplikasi Sudah tentu, kita tidak boleh berhenti pada titik yang kita lihat halaman telah selesai, kita mesti melakukannya tidak kira apa pun Log masuk dan log masuk, jadi...
Kemudian...
Saya memasukkan kata laluan pengguna berkali-kali, mendorong bahawa log masuk berjaya, tetapi keputusan akhir masih ditolak, o(╥﹏╥)o
Apa yang berikut ialah banyak perjalanan untuk mengisi lubang
Lihat log...
Lihat pelbagai permintaan permintaan...
Saya mengesyaki terdapat BUG dalam sesi musim bunga... ...
Malah mendayakan penyahpepijatan mod DEBUG jauh, dan akhirnya melihat dalam mod DEBUG universal yang apabila sesi musim bunga mendapatSesi, jika sesi diperoleh, akan terlebih dahulu menentukan sama ada sesi telah tamat tempoh, bandingkan Kaedah ini juga sangat mudah, iaitu mendapatkan masa sistem semasa dan membandingkannya dengan masa tamat sesi Jika masa semasa kurang daripada masa tamat, ia menunjukkan bahawa sesi belum tamat. Apabila saya melihat ini, saya serta-merta merasakan rasa pencerahan, dan alam semesta kecil akhirnya tercetus di sini.
Nima—> Semua sesi yang diperoleh telah tamat tempoh, dan kemudian...kemudian...tentunya saya tergesa-gesa berlari untuk menyemak masa pelayan, jadi...saya menangis o(╥﹏╥)o , ternyata Nima Awak yang tipu saya...
Untuk memperingati perjalanan ini, saya siarkan artikel ini
arahan tarikh:
tarikh: Lihat masa semasa, hasilnya adalah seperti berikut: Sel 4 Mac 01:36:45 CST 2017
tarikh -s 09:38:40 :Tetapkan masa semasa, hasilnya adalah seperti berikut: Sel 4 Mac 09:38:40 CST 2017
arahan ntpdate:
ntpdate -u ntp.api.bz: Perintah Penyegerakan masa rangkaian
pelayan biasa ntp:
Pusat Perkhidmatan Waktu Negara China: 210.72.145.44
Pelayan NTP (Shanghai): ntp.api.bz
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah bahawa tetapan tamat masa sesi Springboot2 adalah tidak sah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!