http.authorizeRequests()
.antMatchers("/admin").hasAnyAuthority("ROLE_ADMIN", "ROLE_SUPER_ADMIN")
.antMatchers("/user").hasAuthority("ROLE_USER")
.anyRequest().authenticated();
http.authorizeRequests()
.antMatchers("/public").permitAll()
.antMatchers("/admin").access("hasRole('ROLE_ADMIN')")
.antMatchers("/user").access("hasRole('ROLE_USER')")
.anyRequest().authenticated();
CREATE TABLE `authorities` (
`id` int NOT NULL AUTO_INCREMENT,
`customer_id` int NOT NULL,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
KEY `customer_id` (`customer_id`),
CONSTRAINT `authorities_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`)
);
INSERT INTO `authorities` (`customer_id`, `name`)
VALUES (1, 'VIEWACCOUNT');
INSERT INTO `authorities` (`customer_id`, `name`)
VALUES (1, 'VIEWCARDS');
INSERT INTO `authorities` (`customer_id`, `name`)
VALUES (1, 'VIEWLOANS');
INSERT INTO `authorities` (`customer_id`, `name`)
VALUES (1, 'VIEWBALANCE');
package com.eazybytes.model;
import org.hibernate.annotations.GenericGenerator;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
@Entity
@Table(name = "authorities")
public class Authority {
@Id
@GeneratedValue(strategy = GenerationType.AUTO , generator = "native")
@GenericGenerator(name = "native", strategy = "native")
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "customer_id")
private Customer customer;
}
기존에 생성해놓은 AuthenticationProvider 구현 class에 해당 로직을 추가한다.
이렇게 UsernamePasswordAuthenticationToken에 해당 유저의 인가 정보들이 저장되어 이는, security context에 저장된다.
인가를 실행하기 위해 security config class에 다음과 같이 추가한다
다음과 같이 권한이 있는 페이지에는 접근이 가능하다
다음과 같이 인가 권한을 수정한 경우 페이지 접근이 불가능하다.
DELETE FROM `authorities`;
INSERT INTO `authorities` (`customer_id`, `name`)
VALUES (1, 'ROLE_USER');
INSERT INTO `authorities` (`customer_id`, `name`)
VALUES (1, 'ROLE_ADMIN');