[Campamento de entrenamiento práctico de Tencent Cloud Studio] Utilice Cloud Studio para crear un marco de permisos de SpringSecurity

Por favor agregue una descripción de la imagen

1. Introducción a Cloud Studio (Cloud IDE)

Cloud Studio es un entorno de desarrollo integrado (IDE) basado en navegador que proporciona a los desarrolladores una estación de trabajo basada en la nube siempre activa. Los usuarios no necesitan instalar Cloud Studio cuando lo usan y pueden programar en línea en cualquier momento y en cualquier lugar abriendo un navegador.

Como un IDE en línea, Cloud Studio incluye funciones básicas de IDE como resaltado de código, finalización automática, integración de Git y terminal. También admite depuración en tiempo real, extensiones de complementos, etc., que pueden ayudar a los desarrolladores a completar rápidamente el desarrollo. , compilación y despliegue de diversas aplicaciones.

Cloud IDE (Web IDE/Online IDE/Cloud IDE) se ejecuta como un servicio alojado en la nube. Ya no es solo un entorno de desarrollo de software en la nube, sino que proporciona un entorno de desarrollo como servicio que incluye servicios de infraestructura. modo, que naturalmente tiene las siguientes ventajas:

  • No es necesario mantener y configurar proyectos localmente;
  • mejor intercambio y colaboración;
  • Integración directa/acceso a servicios en la nube;
  • Mejorar la forma y la eficiencia del cambio de contexto (diferentes proyectos, sucursales, etc.);
  • Control centralizado y confidencialidad del código fuente;

Con la madurez y la popularización de la tecnología de computación en la nube, se abren cada vez más capacidades y recursos de programación tradicionales en forma de servicios en la nube, desde componentes de servicio de capacidad horizontal, como middleware y bases de datos, hasta servicios empresariales básicos, como servicios de autenticación y reconocimiento facial. están fácilmente disponibles en la nube. Una vez que el mundo cambie del desarrollo de aplicaciones basado en IaaS a un modelo de desarrollo de aplicaciones híbridas basado en IaaS, PaaS e incluso SaaS, los IDE en la nube (IDE web/IDE en línea/IDE en la nube) se convertirán en la mejor manera de conectar todos los componentes de servicio de los desarrolladores. , PaaS y servicios en la nube SaaS: buena opción.

Cloud Studio proporciona una gran cantidad de plantillas de lenguaje de uso común. Ya sea que sea un desarrollador front-end, back-end, de algoritmos o de pila completa, puede encontrar el que más le convenga en Cloud Studio.
inserte la descripción de la imagen aquí
Al mismo tiempo, Cloud Studio también proporciona docenas de aplicaciones de plantilla, que incluyen chat de IA, Tetris, traducción de idiomas, etc. Se puede usar una variedad de aplicaciones listas para usar. Cloud Studio también proporciona un rico ecosistema de aplicaciones, y los desarrolladores pueden enviar sus buenas ideas en cualquier momento.
inserte la descripción de la imagen aquí

2. Escenarios de aplicación

La herramienta de programación en línea Cloud Studio es adecuada para los siguientes escenarios:

2.1 Proyecto de inicio rápido

Usando el entorno preestablecido de Cloud Studio, puede crear directamente el tipo de espacio de trabajo correspondiente, iniciar rápidamente el proyecto e ingresar al estado de desarrollo, sin una configuración de entorno engorrosa.

2.2 Página web de depuración en tiempo real

Cloud Studio tiene un complemento de vista previa incorporado que puede mostrar aplicaciones web en tiempo real. Cuando se cambia su código, la ventana de vista previa se actualizará automáticamente, para que pueda desarrollar y depurar páginas web en tiempo real en Cloud Studio.

2.3 Acceso remoto al servidor en la nube

Cloud Studio lo ayuda a conectarse a su propio servidor en la nube, para que pueda ver archivos en el servidor en la nube en el editor y realizar programación e implementación en línea.

2.4 Ayudar en el desarrollo

En el escenario de la oficina en casa, si encuentra problemas difíciles, puede coordinarse con otros miembros del equipo para analizar y resolver los problemas juntos.

2.5 Proceso de desarrollo

Proporciona una serie de procesos de desarrollo de comunicación, arreglo, solución de problemas, revisión y prueba. Los usuarios solo necesitan concentrarse en el desarrollo comercial.

2.6 Fuerte ecología devops

Al cooperar con la codificación de la plataforma git + Tencent Cloud Server + Cloud Studio, las pequeñas y medianas empresas pueden implementar fácilmente el ecosistema devops, ir a la nube a bajo costo,

3. Introducción a Spring Security

Spring Security es un marco de autenticación (Autenticación) y autorización de usuario (Autorización) basado en Spring, que proporciona una solución completa para la seguridad de las aplicaciones web. Es la mejor opción para marcos de seguridad de nivel empresarial en el mercado.

La autenticación de identidad significa que cuando un usuario accede a los recursos del sistema, el sistema requiere la verificación de la información de identidad del usuario, y solo cuando la identidad del usuario es legal puede acceder al recurso correspondiente. La autenticación de identidad común generalmente requiere que el usuario proporcione un nombre de usuario y una contraseña. El sistema completa el proceso de autenticación verificando el nombre de usuario y la contraseña.

Después de pasar la autenticación de identidad, para acceder a los recursos del sistema, el sistema juzgará si el usuario tiene permiso para acceder al recurso, y solo permitirá el acceso a los recursos del sistema con permiso, y los recursos sin permiso no serán accesibles. Este proceso se llama autorización de usuario. Por ejemplo, el módulo de administración de miembros tiene la función de agregar, eliminar, modificar y verificar, algunos usuarios solo pueden consultar, mientras que otros pueden modificar y eliminar. En términos generales, el sistema asigna diferentes roles a diferentes usuarios, y cada rol corresponde a una serie de permisos.

En términos simples, Spring Security brinda la función de verificar la contraseña de la cuenta y si el operador tiene permiso para acceder a la interfaz.

4 Proyecto de inicio rápido

Aquí usamos Cloud Studio para iniciar rápidamente un proyecto de Spring Security.

4.1 Crear un nuevo espacio de nombres

Aquí hay dos formas:

  1. Puede crear un nuevo espacio de trabajo vacío y completar la construcción del proyecto de acuerdo con la publicación del blog.
  2. También puede importar proyectos a través de la codificación, dirección del proyecto: https://e.coding.net/bcl3/spring/CloudStudioSecurity.git

La estructura del código es la siguiente:
inserte la descripción de la imagen aquí

4.2 Crear una nueva clase de entidad

El método de devolución general y la clase de entidad del artículo se proporcionan aquí.

Por razones de espacio, el método get/set no se proporciona aquí. Si necesita el código fuente, utilice la codificación para descargarlo.

4.2.1 Autenticación

Esta clase toma las constantes proporcionadas en Application.yml.

@ConfigurationProperties(prefix = "authentication")
@Component
public class Authentication {
    
    

    private String loginPage;
    private String loginProcessingUrl;
    private String username;
    private String password;
    private String[] staticPaths ;

4.2.2 Resultado

Se utiliza para proporcionar un formato de devolución unificado.

public class Result {
    
    

    private Integer code;

    private String message;

    private Object data;

4.3 Servicio

La clase UserService consulta la contraseña de la cuenta y verifica si la contraseña de la cuenta es correcta. No hay conexión a la base de datos aquí, y solo se proporciona verificación de consulta simulada. Puede ampliar sobre esta base.

@Component("userService")
public class UserService implements UserDetailsService {
    
    
    Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * spring提供的加密算法,该算法只能验证不能解密
     */
    @Autowired
    PasswordEncoder passwordEncoder;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    
    
        logger.info("输入的账号: " + username);
        if(!"CloudStudio".equalsIgnoreCase(username)) {
    
    
            throw new UsernameNotFoundException("用户名或密码错误");
        }
        String password = passwordEncoder.encode("1234");
        //模拟返回权限
        return new User(username, password, AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
    }
}

4.4 Configuración de Spring Security (núcleo)

Esta clase es la clase principal de Spring Security:

  1. configure (AuthenticationManagerBuilder auth): el método se utiliza para especificar el método de verificación de la contraseña de la cuenta. Eso es llamar al UserService anterior.
  2. configure (WebSecurity web): se utiliza para liberar recursos estáticos, los recursos estáticos no necesitan verificar la cuenta.
  3. configure (HttpSecurity http): se utiliza para configurar qué interfaz verificar la cuenta, a qué interfaz se puede acceder de forma anónima y se puede especificar un filtro personalizado al mismo tiempo. Aquí, AuthenticationSuccessHandler /AuthenticationFailureHandler se especifica para manejar el éxito/fallo de la autenticación . Al mismo tiempo, también puede agregar aquí filtros de código de verificación, filtros de token, etc.. Para obtener más información, consulte la columna de Blogger SpringSecurity/Oauth.
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
    
    

    @Autowired
    UserDetailsService userDetailsService;

    @Autowired
    private AuthenticationSuccessHandler customAuthenticationSuccessHandler;

    @Autowired
    private AuthenticationFailureHandler customAuthenticationFailureHandler;

    @Autowired
    private Authentication authentication;

    @Bean
    public PasswordEncoder passwordEncoder() {
    
    
        return new BCryptPasswordEncoder();
    }

    /**
     * 加入验证用户的service
     * @param auth
     * @throws Exception
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    
    
        auth.userDetailsService(userDetailsService);
    }

    /**
     * 核心方法,配置什么方法可以不通过鉴权就能访问,并指定一系列的过滤器
     *
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    
    
        // 表单登录方式
        http.formLogin()
            .loginPage(authentication.getLoginPage())
            // 登录表单提交处理url, 默认是/login
            .loginProcessingUrl(authentication.getLoginProcessingUrl())
            //验证账号
            .usernameParameter(authentication.getUsername())
            //验证密码
            .passwordParameter(authentication.getPassword())
            //指定访问成功/失败的处理类
            .successHandler(customAuthenticationSuccessHandler)
            .failureHandler(customAuthenticationFailureHandler)
            .and()
            .authorizeRequests()
            ///login/page所有人都能访问,要不没法登录
            .antMatchers(authentication.getLoginPage()).permitAll()
            //其余接口必须验证用户才能访问
            .anyRequest().authenticated()
        ;
    }

    /**
     * 静态资源不需要鉴权
     * @param web
     */
    @Override
    public void configure(WebSecurity web){
    
    
        web.ignoring().antMatchers("/dist/**", "/modules/**", "/plugins/**");
    }
}

4.5 CustomAuthenticationSuccessHandler/CustomAuthenticationFailureHandler

Cuando la verificación tenga éxito o falle, llame a esta clase. Dado que el desarrollo actual está separado de los extremos frontal y posterior, el extremo frontal debe devolver la lógica de procesamiento de acuerdo con el extremo posterior. Aquí, está configurado para proporcionar el retorno json. Si elimina esta clase, se lanzará una excepción en la página en lugar de la página de salto.

@Component("customAuthenticationSuccessHandler")
public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
    
    

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
        HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
    
    
        // 认证成功后,响应JSON字符串
        Result result = Result.ok("认证成功");
        //此处指定返回对象为json,也可以改为返回值
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().write(result.toJsonString());
    }
}

@Component("customAuthenticationFailureHandler")
public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler {
    
    

    @Override
    public void onAuthenticationFailure(HttpServletRequest request,
            HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
    
    
        // 认证失败响应JSON字符串,
        Result result = Result.build(HttpStatus.UNAUTHORIZED.value(), exception.getMessage());
        //此处指定返回对象为json,也可以改为返回值
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().write(result.toJsonString());
    }
}

4.6 aplicación.yml

Configuración de Springboot, página de salto de configuración, etc.

server:
  port: 80
spring:
  thymeleaf:
    cache: false #关闭thymeleaf缓存
authentication:
  loginPage: /login/page
  loginProcessingUrl: /login/form # 登录表单提交处理的url
  username: name # 登录表单提交的用户名的属性名
  password: pwd  # 登录表单提交的密码的属性名
  staticPaths: # 静态页面放弃拦截
  - /dist/**
  - /modules/**
  - /plugins/**

4.7 Controlador

El controlador sirve como entrada para el acceso externo, y al mismo tiempo salta para acceder a la página de thymeleaf.

@Controller
public class CustomLoginController {
    
    

    /**
     * 访问thymeleaf页面
     * @return
     */
    @RequestMapping("/login/page")
    public String toLogin() {
    
    
        return "login";
    }
}

@Controller
public class MainController {
    
    

    @RequestMapping({
    
    "/index", "/", ""})
    public String index() {
    
    
        return "index";
    }
}

4.7 Verificación

Después de iniciar el proyecto, acceda a localhost, a través de la configuración saltará a /login/page, solo inicie sesión en este momento.
inserte la descripción de la imagen aquí
Cuando el acceso es exitoso/fallido, saltará a la página y lanzará una excepción.Este application/jsonmétodo de devolución es adecuado para la separación de los extremos frontal y posterior, y el extremo frontal devuelve la lógica de ejecución a través del extremo posterior.
inserte la descripción de la imagen aquí

Si elimina CustomAuthenticationSuccessHandler /CustomAuthenticationFailureHandler, se lanzará una excepción en la página en lugar de saltar a la página.
inserte la descripción de la imagen aquí

5. Resumen

En la actualidad, el bloguero ha experimentado Cloud Studio durante mucho tiempo y tiene las siguientes opiniones durante el proceso de uso:

  1. Cloud Studio proporciona una gran cantidad de plantillas de idioma. Si es un entusiasta de la pila completa y, a veces, quiere jugar con python, entonces Cloud Studio no requiere que instale varios entornos y se puede usar de forma inmediata.
  2. Como IDE web/IDE en línea/IDE en la nube, Cloud Studio tiene las siguientes ventajas en comparación con los IDE locales: sin instalación, multiplataforma y se puede usar siempre que haya un navegador; entornos comunes preestablecidos, sin necesidad de instalación manual ; soporte para crear vistas previas de páginas web, desarrollo y depuración en línea, ahorro de recursos informáticos, la velocidad de ejecución de Cloud Studio no está vinculada al hardware y las computadoras antiguas de hace muchos años también pueden funcionar sin problemas.
  3. Proporcione la función de pedir ayuda a la audiencia fuera del lugar, y puede invitar a varios maestros a trabajar en el sitio para usted. .
  4. Proporcione un kit de implementación en la nube, coopere con el servicio en la nube Tencent + almacén de código de codificación, las pequeñas y medianas empresas pueden implementar fácilmente la ecología devops.
  5. La expansión continua de funciones, la programación de IA y otras funciones se iteran de vez en cuando.

Incluso en el proceso de usarlo, al blogger le gustaría hacer algunas sugerencias:

  1. Actualmente, el estilo de Cloud Studio es muy parecido al del código vs.
  2. La estructura del proyecto no se puede configurar, y la construcción del proyecto de dependencia padre-hijo de back-end es más complicada.

La primera etapa es la prueba gratuita de Cloud Studio. Según la experiencia de los usuarios antiguos y el costo de comenzar para los nuevos usuarios, el equipo de Cloud Studio en realidad proporciona 3000 minutos de espacio de trabajo gratuito por mes. Para obtener más información, consulte el documentación del producto. ¿Por qué no lo intentan ustedes? haz clic en mí haz clic en mí

Supongo que te gusta

Origin blog.csdn.net/qq_20143059/article/details/132008637
Recomendado
Clasificación