⇒ Transactions multiparties complexes
UserTransaction
(EJB), EntityTransaction
(JPA)setRollbackOnly
@TransactionAttribute
:
MANDATORY
, REQUIRED
, REQUIRES_NEW
, …@Transactional
@Entity
public class Couleur {
@Id
@GeneratedValue
private Long id;
private String nom;
private String description;
private String colorCode;
// ... accesseurs, constructeurs, equals, etc
}
public interface CouleurRepository
extends CrudRepository<Couleur, Long> {
}
définit save
, findById
, findAll
, count
, delete
, existsById
, etc
(c.f. code de CrudRepository
)
@Autowired
private CouleurRepository couleurRepository;
@Test
void testCouleurRepository() {
Couleur c = new Couleur("vert","basique","00FF00");
couleurRepository.save(c);
Optional<Couleur> c2 = couleurRepository.findById(c.getId());
assertTrue(c2.isPresent());
assertEquals(c,c2.get());
}
LOG.info("Classe d'implementation de CouleurRepository: {}",
couleurRepository.getClass());
donne
Classe d'implementation de CouleurRepository:
class com.sun.proxy.$Proxy95
public interface CouleurRepository extends CrudRepository<Couleur, Long> {
Optional<Couleur> findByNom(String nom);
}
@Test
void testMethodeGenereeParNom() {
Couleur c = new Couleur("bleu","basique","00FF00");
couleurRepository.save(c);
Optional<Couleur> c2 = couleurRepository.findByNom(c.getNom());
assertTrue(c2.isPresent());
assertEquals(c,c2.get());
}
find
| By
| Nom
| And
| ColorCode
SELECT c
FROM Couleur c
WHERE c.nom = :nom
AND c.colorCode = :colorCode
Pour les cas complexes: spécifier une requête JPQL
public interface CouleurRepository
extends JpaRepository<Couleur, Long> { //!\\
@Query("select c from Couleur c where c.colorCode = ?1")
Optional<Couleur> getByColorCode(String colorCode);
}
SecurityContextHolder
Authentication
permettant de récupérer
le principal contient des informations sur l’utilisateur
UserDetails
UserDetailsService
Authentication
ServletFilter
AuthenticationManager
ServletFilter
s AccessDecisionManager
decide(authentication, targetObject, configAttributes)
AccessDeniedException
, InsufficientAuthenticationException
SecurityInterceptor
utilise des AccessDecisionVoter
s
(avec une méthode vote
similaire à decide
)
Source Spring
Activation via @EnableWebSecurity
Classes qui étendent WebSecurityConfigurerAdapter