Boot Spring sebenarnya sangat mudah ...
.
org.thymeleaf.extras thymeleaf-extras-springsecurity4 3.0.3.RELEASE
@SpringBootApplication @EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { public static void main (String [] args) { SpringApplication.run (WebSecurityConfiguration.class, args); } @Bean @Override public AuthenticationManager authenticationManagerBean () throws Exception { super.authenticationManagerBean return (); } @Bean @Override public UserDetailsService userDetailsService () { UserDetails user = User.builder (). Username ( "user"). Password (passwordEncoder (). Encode ( "secret")). roles ( "USER") build ().; UserDetails UserAdmin = User.builder (). Username ( "admin"). Password (passwordEncoder (). Encode ( "secret")). roles ( "ADMIN") build ().; return new InMemoryUserDetailsManager (user, UserAdmin); } @Bean public PasswordEncoder passwordEncoder () { return new BCryptPasswordEncoder (); } @Override protected void set (http HttpSecurity) throws Exception { http .csrf (). disable () .authorizeRequests () .antMatchers ( "/" "/ index", "/ webpublico"). permitAll () .antMatchers ( "/ webprivado"). authenticated () .antMatchers ( "/ webadmin"). hasRole ( "ADMIN"). and () .formLogin () .loginPage ( "/ login") .permitAll () .and () .logout () // get method for I desabilitado CSRF .permitAll (); } }
@SpringBootApplication
dan @EnableWebSecurity
. Teg pertama adalah jelas - sejak permohonan kami, kami mahu bekerja dengan Spring Boot.Yang kedua adalah untuk menentukan bahawa keselamatan web diaktifkan; jujur, label ini tidak diperlukan. Boot Spring sangat pandai, seperti yang kita lihat keselamatan pakej (dalam pom.xml, ingat) dalam projek kami. Ia termasuk mesej ini sekali lagi, yang tidak semestinya sesuatu yang buruk, kerana ia memberikan penjelasan lebih lanjut tetapi, walaupun, berlebihan.WebSecurityConfigurerAdapter
kerana kita akan menimpa beberapa fungsi kelas itu. Jadi, anda perlu memahami Spring dan melihat apakah terdapat kelas yang mengimplementasikan antara muka WebSecurityConfigurer
, yang mengimplementasikan WebSecurityConfigurerAdapter
kelas, dan jika ya, ia menggunakan fungsi antara muka itu untuk mengkonfigurasi aplikasi keselamatan.authenticationManagerBean
untuk memulangkan kelas yang bertanggungjawab untuk mengurus pengesahan (seperti namanya). Baiklah, anda mungkin tertanya-tanya: tetapi bagaimana pula jika anda hanya memanggil fungsi untuk menentukan? Ini sebenarnya sangat mudah kerana kita menggunakan @Bean
label untuk Spring. Adalah penting untuk mengetahui di mana untuk mendapatkan (menyuntikkan) jenis objek AuthenticationManager
kerana anda perlu mengawal keselamatan.userDetailsService
, kami menentukan pengguna yang akan mempunyai akses ke laman web kami. Dalam kes ini, kami mencipta dua pengguna: pengguna dan admin (ya, saya tahu bahawa saya tidak cuba terlalu keras memilih nama itu), masing-masing mempunyai kata laluan dan peranannya sendiri. Jelaskan bahawa ROLE adalah harfiah percuma, yang bermaksud bahawa ini boleh menjadi apa sahaja yang anda mahukan. Contohnya, USER_WITH_EYES - hakikatnya, maka kita akan menggunakan peranan itu, ia harus sepadan dengan surat dengan huruf dengan set.passwordEncoder
@Bean
, yang dijelaskan dengan Spring @Bean
label.PasswordEncoder
antara muka. Jika kita gagal, kita tidak dapat mencari permohonan itu.InMemoryUserDetailsManager
. Dalam program sebenar, ia akan menggunakan JdbcUserDetailsManager
, yang membolehkan kami menyimpannya dalam pangkalan data. Atau, ini boleh termasuk mana-mana kelas lain yang melaksanakan antara muka UserDetailsManager
, kerana ia boleh menjadi LdapUserDetailsManager
jika kita menggunakan perkhidmatan LDAP.csrf (). disable ()
Pemalsuan permintaan silang tapak , yang juga dikenali sebagai serangan satu klik atau menunggang sesi dan disingkat CSRF (kadang-kadang disebut surfing laut ) atau XSRF , adalah sejenis eksploit yang berniat jahat di laman web di mana arahan yang tidak dibenarkan dihantar daripada pengguna web amanah permohonan. Terdapat banyak cara di mana tapak web berniat jahat boleh menghantar arahan tersebut; Contohnya, tag imej khusus, bentuk tersembunyi, dan JavaScript XMLHttpRequests, misalnya, semuanya boleh berfungsi tanpa interaksi pengguna atau pengetahuan. Tidak seperti skrip silang tapak (XSS), yang mengeksploitasi kepercayaan pengguna untuk laman web tertentu, CSRF mengeksploitasi kepercayaan bahawa tapak mempunyai dalam pelayar pengguna.
.authorizeRequests () .antMatchers ( "/" "/ index", "/ webpublico"). permitAll ()
antMatchers ( "/webprivado"). authenticated ()
.antMatchers ( "/webadmin"). hasRole ( "ADMIN")
antMatchers
membolehkan penggunaan ungkapan biasa, jadi jika, misalnya, kami ingin memohon peraturan kepada semua yang bergantung pada laluan, kami boleh meletakkan ini:.formLogin(). loginPage( "/login"). permitAll()
logout(). permitAll()
WebController.java
. @Controller public class WebController { @RequestMapping ({ "/", "index"}) public String start () { return "index"; } @RequestMapping ( "/webprivado") public private String () { "Private" return; } @RequestMapping ( "/webpublico") public String loginpub () { "Public" return; } @RequestMapping ( "/webadmin") public String admin () { return "admin"; } @RequestMapping ( "/login") public String login () { return "login"; } }
@Controller
untuk menjadi kelas di mana kita boleh menentukan titik kemasukan untuk permintaan web.@RequestMapping
untuk menentukan URL dan diproses oleh setiap fungsi. Oleh itu, permulaan fungsi akan dipanggil apabila permintaan kepada URL, " / " atau " / indeks ."Perhatikan bahawa kita perlu dimasukkan ke dalam bar awal. <! DOCTYPE html> Home Page title> Head>
Home Page h1>
Click here to view a page public. P>
If you are a regular user clicks here to view a private page p>
If you are a regular administrator
click here to see the profile Administrator p>
Hello someone span>
Disconnect p> Div> Body> Html>
Bagaimanakah ia kelihatan seperti HTML tulen? Ini adalah salah satu kelebihan menggunakan tag HTML standard Thymeleaf. Saya tidak akan menjelaskan bahasa di sini, tetapi saya akan menerangkan beberapa label yang digunakan:
- Buat pautan ke URL " /webpublico." Ia seperti menggunakan "tag .
- Ini adalah satu-satunya kod yang akan diberikan di DIV jika pengguna disahkan. Dengan kata lain, jika pengguna tidak log masuk, ia tidak dipaparkan di laman web yang antara tag DIV (sebenarnya, ia tidak akan dipaparkan pada halaman web atau DIV).
someone span> - Jika pengguna log masuk dengan nama pengguna mereka, ia akan menunjukkan apa yang anda ada di antara tag span.Dalam kes ini, ia menunjukkan seseorang.
Dan dengan ini, kami mempunyai aplikasi yang selamat! Ya, kami mengamankan halaman web dengan hanya dua kelas Java dan fail HTML yang sesuai.
Untuk menyelesaikan siaran ini, saya meninggalkan beberapa tangkapan skrin aplikasi:
Ini kelihatan di laman utama sebaik sahaja ia mengenal pasti 'pengguna'.
Sekarang, kami mengenal pasti pengguna "pengguna:"
Harap ini membantu! Selamat coding.
.
.
Diterjemah dari sumber: https://dzone.com/articles/securing-a-web-with-spring-boot
No comments:
Post a Comment