Fakultas Ilmu Komputer UI

Skip to content
Snippets Groups Projects
Commit e103cb53 authored by Muhammad Raihan Adliputra's avatar Muhammad Raihan Adliputra
Browse files

Merge branch 'feat/tutorial-7-belajarbelajar' into 'main'

feat(tutorial7): belajarbelajar

See merge request !7
parents 16423bdc ca7e7146
No related branches found
No related tags found
1 merge request!7feat(tutorial7): belajarbelajar
Showing
with 5334 additions and 2 deletions
......@@ -2,6 +2,35 @@
## Authors
> **Muhammad Raihan Adliputra** - *2006485680* - *A*
## Tutorial 7
1. Jelaskan secara singkat perbedaan Otentikasi dan Otorisasi! Di bagian mana (dalam kode yang telah anda buat) konsep tersebut diimplementasi?<br />
* **Otentifikasi** adalah proses verifikasi agar user bisa masuk ke dalam sistem, atau dalam kata lain **otentifikasi** akan mengecek siapakah user yang ingin masuk dan mengecek pula *role* dari si user. **Otentifikasi** dilakukan pada potongan kode:
```
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(encoder());
}
```
* **Otorisasi** adalah kegiatan memberikan akses kepada seorang user sesuai dengan rolenya masing-masing. **Otorisasi** dilakukan pada potongan kode:
```
.antMatchers("/user/viewall").hasAuthority("Admin")
```
```
<div sec:authorize="hasAuthority('Admin')
```
2. Apa itu BCryptPasswordEncoder? Jelaskan secara singkat cara kerja dan tujuannya.<br />
**BCryptEncoder** merupakan encoder kata sandi satu arah. **BCryptEncoder** bekerja secara otomatis men-generate lalu menggunakan random salt untuk menentukan hashingnya, sehingga nanti akan menghasilkan hasing yang berbeda-beda.
3. Apakah penyimpanan password sebaiknya menggunakan encryption atau hashing? Mengapa demikian?<br />
Penyimpanan password sebaiknya menggunakan **enkripsi**. Hal tersebut dikarenakan enkripsi akan berguna dalam penyandian sebuah data dan kerahasiaan dari data tersebut pun akan terjaga.
4. Jelaskan secara singkat apa itu UUID beserta penggunaannya!<br />
**Universally Unique Identifier** atau **UUID** merupakan kode yang bersifat unik/tidak ada objek lain yang akan sama dengan UUID tersebut. **UUID** terdiri dari 32 karakter dan biasanya digunakan sebagai *identifier* atau *id* dari sebuah objek.
5. Apa kegunaan class UserDetailsServiceImpl.java? Mengapa harus ada class tersebut?<br />
**Class UserDetailsServiceImpl.java** merupakan sebuah class bertipe interface yang digunakan untuk men-setting otorisasi dan otentikasi. Jika class tersebut tidak dibuat maka info terkait otentikasi dan otorisasi tidak bisa diberikan.
## Tutorial 6
### Pertanyaan
1. Perhatikan apa yang terjadi pada file index.html pada branch feat/tutorial-6-advancedgit-1. Apa yang terjadi setelah git cherry-pick dilakukan? Apakah kita bisa melakukan cherrypick tanpa harus melakukan commit?<br />
......
......@@ -15,6 +15,8 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.projectlombok:lombok:1.18.22'
implementation 'org.projectlombok:lombok:1.18.22'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
......@@ -24,6 +26,8 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-validation:2.7.3'
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity5', version: '3.0.4.RELEASE'
}
tasks.named('test') {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -11,4 +11,3 @@ public class BelajarbelajarApplication {
}
}
\ No newline at end of file
package apap.tutorial.belajarbelajar.controller;
import java.security.Principal;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
......
package apap.tutorial.belajarbelajar.model;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Entity
@Table(name="role")
public class RoleModel implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@NotNull
@Size(max=50)
@Column(name="role", nullable=false)
private String role;
@OneToMany(mappedBy="role", fetch=FetchType.LAZY)
@OnDelete(action=OnDeleteAction.CASCADE)
@JsonIgnore
private List<UserModel> userRole;
}
\ No newline at end of file
package apap.tutorial.belajarbelajar.repository;
import apap.tutorial.belajarbelajar.model.RoleModel;
import apap.tutorial.belajarbelajar.model.UserModel;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface RoleDb extends JpaRepository<RoleModel, Long> {
RoleModel findByRole(String role);
RoleModel findRoleById(Long id);
}
package apap.tutorial.belajarbelajar.repository;
import apap.tutorial.belajarbelajar.model.UserModel;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserDb extends JpaRepository<UserModel, Long> {
UserModel findByUsername(String username);
}
package apap.tutorial.belajarbelajar.security;
public @interface EnableWebSecurity {
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment