Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Rubén Ramírez
/
MangAffinity
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
d7313e13
authored
Feb 20, 2025
by
Rubén Ramírez
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
feat: [UsuariosController]: Implementado el UsuariosController con el método de registro usuario
parent
84451dc5
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
105 additions
and
20 deletions
src/main/java/com/ujaen/tfg/mangaffinity/MangAffinityApplication.java
src/main/java/com/ujaen/tfg/mangaffinity/rest/UsuariosController.java
src/main/java/com/ujaen/tfg/mangaffinity/seguridad/JwtUtil.java
src/main/java/com/ujaen/tfg/mangaffinity/MangAffinityApplication.java
View file @
d7313e13
...
@@ -8,7 +8,7 @@ import org.springframework.boot.autoconfigure.domain.EntityScan;
...
@@ -8,7 +8,7 @@ import org.springframework.boot.autoconfigure.domain.EntityScan;
"com.ujaen.tfg.mangaffinity.servicios"
,
"com.ujaen.tfg.mangaffinity.servicios"
,
"com.ujaen.tfg.mangaffinity.repositorios"
,
"com.ujaen.tfg.mangaffinity.repositorios"
,
"com.ujaen.tfg.mangaffinity.rest"
,
"com.ujaen.tfg.mangaffinity.rest"
,
//
"com.ujaen.tfg.mangaffinity.seguridad"
"com.ujaen.tfg.mangaffinity.seguridad"
})
})
@EntityScan
(
basePackages
=
"com.ujaen.tfg.mangaffinity"
)
@EntityScan
(
basePackages
=
"com.ujaen.tfg.mangaffinity"
)
public
class
MangAffinityApplication
{
public
class
MangAffinityApplication
{
...
...
src/main/java/com/ujaen/tfg/mangaffinity/rest/UsuariosController.java
0 → 100644
View file @
d7313e13
package
com
.
ujaen
.
tfg
.
mangaffinity
.
rest
;
import
com.ujaen.tfg.mangaffinity.entidades.Usuario
;
import
com.ujaen.tfg.mangaffinity.excepciones.UsuarioYaRegistrado
;
import
com.ujaen.tfg.mangaffinity.rest.DTO.DTOUsuario
;
import
com.ujaen.tfg.mangaffinity.rest.DTO.Mapper
;
import
com.ujaen.tfg.mangaffinity.seguridad.JwtUtil
;
import
com.ujaen.tfg.mangaffinity.servicios.ServicioUsuarios
;
import
jakarta.validation.ConstraintViolationException
;
import
jakarta.validation.Valid
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
@RestController
@RequestMapping
(
"/usuarios"
)
public
class
UsuariosController
{
@Autowired
private
ServicioUsuarios
servicioUsuarios
;
@Autowired
private
Mapper
mapper
;
@ResponseStatus
(
HttpStatus
.
UNPROCESSABLE_ENTITY
)
@ExceptionHandler
(
ConstraintViolationException
.
class
)
public
void
mapeadoExcepcionConstraintViolationException
()
{}
@PostMapping
(
"/"
)
public
ResponseEntity
<
String
>
registrarUsuario
(
@RequestBody
DTOUsuario
dtoUsuario
)
{
try
{
Usuario
usuario
=
mapper
.
entity
(
dtoUsuario
);
servicioUsuarios
.
crearUsuario
(
usuario
);
return
ResponseEntity
.
status
(
HttpStatus
.
CREATED
).
build
();
}
catch
(
UsuarioYaRegistrado
e
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
CONFLICT
).
build
();
}
}
}
src/main/java/com/ujaen/tfg/mangaffinity/seguridad/JwtUtil.java
View file @
d7313e13
package
com
.
ujaen
.
tfg
.
mangaffinity
.
seguridad
;
package
com
.
ujaen
.
tfg
.
mangaffinity
.
seguridad
;
import
io.jsonwebtoken.Claims
;
import
io.jsonwebtoken.*
;
import
io.jsonwebtoken.Jwts
;
import
io.jsonwebtoken.security.Keys
;
import
io.jsonwebtoken.SignatureAlgorithm
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.Map
;
import
javax.crypto.SecretKey
;
@Component
@Component
public
class
JwtUtil
{
public
class
JwtUtil
{
private
final
String
SECRET_KEY
=
"clave_secreta"
;
// Cámbiala por algo más seguro
private
static
final
SecretKey
SECRET_KEY
=
Keys
.
secretKeyFor
(
SignatureAlgorithm
.
HS256
);
private
static
final
long
EXPIRATION_TIME
=
86400000
;
// 1 día en milisegundos
public
String
generarToken
(
String
email
)
{
/**
* Genera un token JWT con los datos proporcionados.
*
* @param claims Información adicional a incluir en el token.
* @param subject Usuario o identificador asociado al token.
* @return Token JWT generado.
*/
public
String
generateToken
(
Map
<
String
,
Object
>
claims
,
String
subject
)
{
return
Jwts
.
builder
()
return
Jwts
.
builder
()
.
setSubject
(
email
)
.
setClaims
(
claims
)
.
setIssuedAt
(
new
Date
())
.
setSubject
(
subject
)
.
setExpiration
(
new
Date
(
System
.
currentTimeMillis
()
+
1000
*
60
*
60
*
10
))
// 10 horas
.
setIssuedAt
(
new
Date
(
System
.
currentTimeMillis
()))
.
signWith
(
SignatureAlgorithm
.
HS256
,
SECRET_KEY
)
.
setExpiration
(
new
Date
(
System
.
currentTimeMillis
()
+
EXPIRATION_TIME
))
.
signWith
(
SECRET_KEY
)
.
compact
();
.
compact
();
}
}
public
String
extraerEmail
(
String
token
)
{
/**
return
getClaims
(
token
).
getSubject
();
* Obtiene el usuario (subject) desde un token JWT.
*
* @param token Token JWT.
* @return Usuario extraído del token.
*/
public
String
extractUsername
(
String
token
)
{
return
extractClaim
(
token
,
Claims:
:
getSubject
);
}
/**
* Obtiene la fecha de expiración de un token JWT.
*
* @param token Token JWT.
* @return Fecha de expiración.
*/
public
Date
extractExpiration
(
String
token
)
{
return
extractClaim
(
token
,
Claims:
:
getExpiration
);
}
}
public
boolean
validarToken
(
String
token
,
String
email
)
{
/**
return
(
email
.
equals
(
extraerEmail
(
token
))
&&
!
estaExpirado
(
token
));
* Extrae un claim específico del token.
*
* @param token Token JWT.
* @param claimsResolver Función que extrae el claim.
* @return Valor del claim extraído.
*/
public
<
T
>
T
extractClaim
(
String
token
,
java
.
util
.
function
.
Function
<
Claims
,
T
>
claimsResolver
)
{
final
Claims
claims
=
extractAllClaims
(
token
);
return
claimsResolver
.
apply
(
claims
);
}
}
private
boolean
estaExpirado
(
String
token
)
{
/**
return
getClaims
(
token
).
getExpiration
().
before
(
new
Date
());
* Valida si un token es correcto y no ha expirado.
*
* @param token Token JWT.
* @param username Nombre de usuario a validar.
* @return `true` si el token es válido.
*/
public
boolean
validateToken
(
String
token
,
String
username
)
{
final
String
extractedUsername
=
extractUsername
(
token
);
return
(
extractedUsername
.
equals
(
username
)
&&
!
isTokenExpired
(
token
));
}
}
private
Claims
getClaims
(
String
token
)
{
private
boolean
isTokenExpired
(
String
token
)
{
return
Jwts
.
parser
()
return
extractExpiration
(
token
).
before
(
new
Date
());
}
private
Claims
extractAllClaims
(
String
token
)
{
return
Jwts
.
parserBuilder
()
.
setSigningKey
(
SECRET_KEY
)
.
setSigningKey
(
SECRET_KEY
)
.
build
()
.
parseClaimsJws
(
token
)
.
parseClaimsJws
(
token
)
.
getBody
();
.
getBody
();
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment