Plataforma de Educação em Segurança Utilizando o Framework SSM

Esta plataforma de educação em segurança emprega arquitetura B/S com o framework SSM (Spring, SpringMVC, MyBatis) e banco de dados MySQL. O sistema oferece funcionalidades para administradores e usuários:

Administradores

  • Gerenciamento de usuários e perfil
  • Controle de cursos de segurança e categorias
  • Administração de loja virtual e pedidos
  • Criação de exames e questões

Usuários

  • Acesso a cursos de segurança
  • Realização de exames e histórico de tentativas
  • Gerenciamento de pedidos e endereços
  • Acúmulo de pontos em loja virtual

Especificações Técnicas

  • Linguagem principal: Java
  • Frontend: Vue.js/HTML
  • Persistência: MyBatis
  • Servidor: Tomcat 7-10
  • Banco de dados: MySQL 5.7+
  • Gerenciamento de dependências: Maven

Implementação de Código

Interceptor para CORS e Auetnticação


package com.secure.interceptor;

import java.io.PrintWriter;
import javax.servlet.http.*;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import com.secure.annotation.IgnoreAuth;
import com.secure.model.AccessToken;
import com.secure.service.TokenService;

@Component
public class AuthInterceptor implements HandlerInterceptor {

    private static final String TOKEN_HEADER = "Authorization";
    
    @Autowired
    private TokenService tokenService;

    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) throws Exception {
        res.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));
        res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
        res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");

        if(handler instanceof HandlerMethod) {
            IgnoreAuth ann = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
            if(ann != null) return true;
        }

        String authToken = req.getHeader(TOKEN_HEADER);
        if(authToken != null) {
            AccessToken token = tokenService.validarToken(authToken);
            if(token != null) {
                req.getSession().setAttribute("userID", token.getUserId());
                return true;
            }
        }
        
        res.setContentType("application/json");
        PrintWriter out = res.getWriter();
        out.print("{\"status\":401, \"message\":\"Credenciais inválidas\"}");
        return false;
    }
}

Controlador de Autenticação


package com.secure.controller;

import org.springframework.web.bind.annotation.*;
import com.secure.model.Usuario;
import com.secure.service.UsuarioService;

@RestController
@RequestMapping("/api/usuarios")
public class AuthController {

    @Autowired
    private UsuarioService usuarioService;

    @PostMapping("/autenticar")
    public Resposta autenticar(@RequestParam String login, 
                               @RequestParam String senha) {
        Usuario user = usuarioService.buscarPorCredenciais(login, senha);
        if(user == null) {
            return Resposta.erro("Credenciais inválidas");
        }
        String token = TokenService.gerarToken(user.getId());
        return Resposta.sucesso().adicionar("token", token);
    }

    @PostMapping("/registrar")
    public Resposta registrar(@RequestBody Usuario novoUsuario) {
        if(usuarioService.existeUsuario(novoUsuario.getLogin())) {
            return Resposta.erro("Usuário já existe");
        }
        usuarioService.registrar(novoUsuario);
        return Resposta.sucesso();
    }

    @PostMapping("/recuperar-senha")
    public Resposta recuperarSenha(@RequestParam String login) {
        usuarioService.redefinirSenha(login, "senhaTemporaria");
        return Resposta.sucesso("Senha redefinida");
    }
}

class Resposta {
    private int codigo;
    private String mensagem;
    
    public static Resposta sucesso() {
        return new Resposta(200, "Sucesso");
    }
    
    // Métodos auxiliares omitidos para brevidade
}

Tags: java SSM Spring MyBatis MySQL

Publicado em 7-7 23:35