Html redirect ke halaman login

Persyaratan umum untuk aplikasi web adalah mengarahkan berbagai jenis pengguna ke halaman berbeda setelah login. Contohnya adalah mengarahkan pengguna standar ke /beranda. halaman html dan pengguna admin ke /console. halaman html misalnya

Artikel ini akan menunjukkan cara mengimplementasikan mekanisme ini dengan cepat dan aman menggunakan Spring Security. Artikel ini juga dibangun di atas tutorial Spring MVC yang berhubungan dengan pengaturan hal-hal inti MVC yang diperlukan untuk proyek tersebut

2. Konfigurasi Keamanan Pegas

Spring Security menyediakan komponen yang memiliki tanggung jawab langsung untuk memutuskan apa yang harus dilakukan setelah otentikasi berhasil – AuthenticationSuccessHandler

2. 1. Konfigurasi Dasar

Mari kita konfigurasikan class dasar @Configuration dan @Service

@Configuration
@EnableWebSecurity
public class SecSecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            // .. endpoints
            .formLogin()
                .loginPage("/login.html")
                .loginProcessingUrl("/login")
                .defaultSuccessUrl("/homepage.html", true)
            // .. other configuration   
        return http.build();
    }
}

Bagian dari konfigurasi ini yang menjadi fokus adalah metode defaultSuccessUrl(). Setelah login berhasil, setiap pengguna akan dialihkan ke beranda. html

Selanjutnya, kita perlu mengonfigurasi pengguna dan peran mereka. Untuk tujuan artikel ini, akan mengimplementasikan layanan UserDetailS sederhana dengan dua pengguna, masing-masing memiliki satu peran tunggal. Untuk informasi lebih lanjut tentang topik ini, baca artikel kami Keamanan Musim Semi – Peran dan Hak Istimewa

@Service
public class MyUserDetailsService implements UserDetailsService {

    private Map<String, User> roles = new HashMap<>();

    @PostConstruct
    public void init() {
        roles.put("admin2", new User("admin", "{noop}admin1", getAuthority("ROLE_ADMIN")));
        roles.put("user2", new User("user", "{noop}user1", getAuthority("ROLE_USER")));
    }

    @Override
    public UserDetails loadUserByUsername(String username) {
        return roles.get(username);
    }

    private List<GrantedAuthority> getAuthority(String role) {
        return Collections.singletonList(new SimpleGrantedAuthority(role));
    }
}
_

Perhatikan juga bahwa dalam contoh sederhana ini, kami tidak akan menggunakan pembuat enkode kata sandi, oleh karena itu kata sandi diawali dengan {noop}

2. 2. Menambahkan Handler Sukses Kustom

Kami sekarang memiliki dua pengguna dengan dua peran berbeda. pengguna dan admin. Setelah login berhasil, keduanya akan diarahkan ke beranda. html. Mari kita lihat bagaimana kita dapat memiliki pengalihan yang berbeda berdasarkan peran pengguna

Pertama, kita perlu mendefinisikan custom success handler sebagai bean

@Bean
public AuthenticationSuccessHandler myAuthenticationSuccessHandler(){
    return new MySimpleUrlAuthenticationSuccessHandler();
}

Dan kemudian ganti panggilan defaultSuccessUrl dengan metode successHandler, yang menerima penangan sukses kustom kami sebagai parameter

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        // endpoints
        .formLogin()
            .loginPage("/login.html")
            .loginProcessingUrl("/login")
            .successHandler(myAuthenticationSuccessHandler())
        // other configuration      
    return http.build();
}

2. 3. Konfigurasi XML

Sebelum melihat penerapan custom success handler kita, mari kita lihat juga konfigurasi XML yang setara

<http use-expressions="true" >
    <!-- other configuration -->
    <form-login login-page='/login.html' 
      authentication-failure-url="/login.html?error=true"
      authentication-success-handler-ref="myAuthenticationSuccessHandler"/>
    <logout/>
</http>

<beans:bean id="myAuthenticationSuccessHandler"
  class="com.baeldung.security.MySimpleUrlAuthenticationSuccessHandler" />

<authentication-manager>
    <authentication-provider>
        <user-service>
            <user name="user1" password="{noop}user1Pass" authorities="ROLE_USER" />
            <user name="admin1" password="{noop}admin1Pass" authorities="ROLE_ADMIN" />
        </user-service>
    </authentication-provider>
</authentication-manager>
_

3. Penangan Keberhasilan Otentikasi Khusus

Selain antarmuka AuthenticationSuccessHandler, Spring juga menyediakan default yang masuk akal untuk komponen strategi ini – AbstractAuthenticationTargetUrlRequestHandler dan implementasi sederhana – SimpleUrlAuthenticationSuccessHandler. Biasanya implementasi ini akan menentukan URL setelah login dan melakukan pengalihan ke URL tersebut

Meskipun agak fleksibel, mekanisme untuk menentukan URL target ini tidak memungkinkan penentuan dilakukan secara terprogram – jadi kami akan mengimplementasikan antarmuka dan memberikan implementasi kustom dari penangan keberhasilan. Implementasi ini akan menentukan URL untuk mengarahkan pengguna setelah login berdasarkan peran pengguna.  

Pertama-tama, kita perlu mengganti metode onAuthenticationSuccess

public class MySimpleUrlAuthenticationSuccessHandler
  implements AuthenticationSuccessHandler {
 
    protected Log logger = LogFactory.getLog(this.getClass());

    private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, 
      HttpServletResponse response, Authentication authentication)
      throws IOException {
 
        handle(request, response, authentication);
        clearAuthenticationAttributes(request);
    }

Metode khusus kami memanggil dua metode pembantu

protected void handle(
        HttpServletRequest request,
        HttpServletResponse response, 
        Authentication authentication
) throws IOException {

    String targetUrl = determineTargetUrl(authentication);

    if (response.isCommitted()) {
        logger.debug(
                "Response has already been committed. Unable to redirect to "
                        + targetUrl);
        return;
    }

    redirectStrategy.sendRedirect(request, response, targetUrl);
}
_

Di mana metode berikut melakukan pekerjaan sebenarnya dan memetakan pengguna ke URL target

protected String determineTargetUrl(final Authentication authentication) {

    Map<String, String> roleTargetUrlMap = new HashMap<>();
    roleTargetUrlMap.put("ROLE_USER", "/homepage.html");
    roleTargetUrlMap.put("ROLE_ADMIN", "/console.html");

    final Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
    for (final GrantedAuthority grantedAuthority : authorities) {
        String authorityName = grantedAuthority.getAuthority();
        if(roleTargetUrlMap.containsKey(authorityName)) {
            return roleTargetUrlMap.get(authorityName);
        }
    }

    throw new IllegalStateException();
}

Perhatikan bahwa metode ini akan mengembalikan URL yang dipetakan untuk peran pertama yang dimiliki pengguna. Jadi, jika pengguna memiliki banyak peran, URL yang dipetakan akan cocok dengan peran pertama yang diberikan dalam koleksi otoritas

protected void clearAuthenticationAttributes(HttpServletRequest request) {
    HttpSession session = request.getSession(false);
    if (session == null) {
        return;
    }
    session.removeAttribute(WebAttributes.AUTHENTICATION_EXCEPTION);
}
_

DeterminanTargetUrl – yang merupakan inti dari strategi – cukup melihat jenis pengguna (ditentukan oleh otoritas) dan memilih URL target berdasarkan peran ini

Jadi, pengguna admin – ditentukan oleh otoritas ROLE_ADMIN – akan dialihkan ke halaman konsol setelah login, sedangkan pengguna standar – sebagaimana ditentukan oleh ROLE_USER – akan dialihkan ke beranda

4. Kesimpulan

Seperti biasa, kode yang disajikan dalam artikel ini tersedia di GitHub. Ini adalah proyek berbasis Maven, jadi seharusnya mudah untuk diimpor dan dijalankan sebagaimana adanya

Bagaimana cara mengarahkan ulang ke halaman login di HTML?

Untuk mengalihkan satu halaman HTML ke halaman lain, Anda perlu menambahkan tag . The section of an HTML document contains metadata that is useful for the browser, but invisible to users viewing the page.

Bagaimana cara membuat pengalihan halaman login?

Untuk mengalihkan pengguna ke halaman tertentu setelah login, Anda cukup menambahkan parameter redirect URL di form login Shortcode . Parameter redirect_url memungkinkan Anda untuk mengarahkan ulang ke halaman tertentu setelah pengguna masuk.

Bagaimana cara membuat tautan pengalihan dalam HTML?

Cara paling sederhana untuk mengalihkan ke URL lain adalah menggunakan tag HTML . The content attribute sets the delay before the browser redirects the user to the new web page. To redirect immediately, set this parameter to “0” seconds for the content attribute.

Bagaimana cara menggunakan pengalihan 301 dalam HTML?

Ke 301 Redirect Satu Halaman. html dengan nama file halaman yang ingin dialihkan . Jika file tidak berada di tingkat atas direktori, maka sertakan jalur file di depan /old-file. html. Ganti http. // www. domain. com/file-baru. html dengan URL yang Anda inginkan untuk mengarahkan halaman.