All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.minbox.framework.security.WebSecurityConfiguration Maven / Gradle / Ivy

package org.minbox.framework.security;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.security.web.access.AccessDeniedHandler;

import java.util.Collections;
import java.util.List;

/**
 * ApiBoot integrates SpringSecurity configuration class
 *
 * @author 恒宇少年
 */
public abstract class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    /**
     * Configure Excluded Path List
     *
     * @return Path list
     */
    protected List configureIgnoreUrls() {
        return Collections.emptyList();
    }

    /**
     * Configure SpringSecurity Web
     * 

* Set a list of paths to exclude security intercepts *

* * @param web {@link WebSecurity} */ @Override public void configure(WebSecurity web) { WebSecurity.IgnoredRequestConfigurer ignoredRequestConfigurer = web.ignoring(); configureIgnoreUrls().forEach(url -> ignoredRequestConfigurer.antMatchers(url)); } /** * Configure user authentication management *

* Password encryption method {@link #passwordEncoder()} *

* * @param auth {@link AuthenticationManagerBuilder} * @throws Exception exception */ @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService()).passwordEncoder(passwordEncoder()); } /** * Authorized manager * * @return {@link AuthenticationManager} * @throws Exception exception */ @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } /** * Disable basic http * * @param http {@link HttpSecurity} * @throws Exception exception */ @Override protected void configure(HttpSecurity http) throws Exception { if (disableHttpBasic()) { http.httpBasic().disable(); } if (disableCsrf()) { http.csrf().disable(); } http.exceptionHandling().accessDeniedHandler(getAccessDeniedHandler()); http.exceptionHandling().authenticationEntryPoint(getAuthenticationEntryPoint()); } /** * Password encryption method * * @return {@link BCryptPasswordEncoder} * @see PasswordEncoder */ @Bean @ConditionalOnMissingBean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } /** * Get spring security exception handler *

* This method is left to the implementation class to obtain the customized {@link AccessDeniedHandler} implementation class IOC instance from the project * If the implementation class does not return an instance, * the default {@link org.minbox.framework.security.handler.DefaultSecurityAccessDeniedHandler} is used to return *

* * @return {@link AccessDeniedHandler} */ protected abstract AccessDeniedHandler getAccessDeniedHandler(); /** * Get authentication endpoint processing * * @return {@link AuthenticationEntryPoint} */ protected abstract AuthenticationEntryPoint getAuthenticationEntryPoint(); /** * Disable basic http *

* This method is an abstract method, and the logic is implemented by subclasses *

* * @return Disable HttpBasic or not */ protected abstract boolean disableHttpBasic(); /** * Disable csrf *

* This method is an abstract method, and the logic is implemented by subclasses *

* * @return Disable Csrf or not */ protected abstract boolean disableCsrf(); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy