Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
SkuciSe
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Tim 2 - 2022
SkuciSe
Commits
a4497676
Commit
a4497676
authored
Aug 31, 2022
by
Bogdan Andjelkovic
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
spring security 1
parent
9415f63c
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
35 additions
and
156 deletions
+35
-156
SkuciSe/src/main/java/com/example/SkuciSe/configuration/WebSecurityConfig.java
+0
-53
SkuciSe/src/main/java/com/example/SkuciSe/controller/AppController.java
+6
-2
SkuciSe/src/main/java/com/example/SkuciSe/model/korisnik/KorisnikDetails.java
+0
-54
SkuciSe/src/main/java/com/example/SkuciSe/model/korisnik/KorisnikDetailsService.java
+0
-23
SkuciSe/src/main/java/com/example/SkuciSe/repository/KorisnikRepository.java
+3
-1
SkuciSe/src/main/resources/templates/index.html
+9
-6
SkuciSe/src/main/resources/templates/login.html
+6
-6
SkuciSe/src/main/resources/templates/register.html
+11
-11
No files found.
SkuciSe/src/main/java/com/example/SkuciSe/configuration/WebSecurityConfig.java
deleted
100644 → 0
View file @
9415f63c
package
com
.
example
.
SkuciSe
.
configuration
;
import
com.example.SkuciSe.model.korisnik.KorisnikDetailsService
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.security.authentication.dao.DaoAuthenticationProvider
;
import
org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
;
import
org.springframework.security.config.annotation.web.builders.HttpSecurity
;
import
org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
;
import
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
;
import
org.springframework.security.core.userdetails.UserDetailsService
;
import
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
;
@Configuration
@EnableWebSecurity
public
class
WebSecurityConfig
extends
WebSecurityConfigurerAdapter
{
@Bean
public
UserDetailsService
userDetailsService
()
{
return
new
KorisnikDetailsService
();
}
@Bean
public
BCryptPasswordEncoder
passwordEncoder
()
{
return
new
BCryptPasswordEncoder
();
}
@Bean
public
DaoAuthenticationProvider
authenticationProvider
()
{
DaoAuthenticationProvider
authenticationProvider
=
new
DaoAuthenticationProvider
();
authenticationProvider
.
setUserDetailsService
(
this
.
userDetailsService
());
authenticationProvider
.
setPasswordEncoder
(
this
.
passwordEncoder
());
return
authenticationProvider
;
}
@Override
protected
void
configure
(
AuthenticationManagerBuilder
auth
)
throws
Exception
{
auth
.
authenticationProvider
(
authenticationProvider
());
}
@Override
protected
void
configure
(
HttpSecurity
http
)
throws
Exception
{
http
.
authorizeRequests
()
.
antMatchers
(
"/index"
).
authenticated
()
.
anyRequest
().
permitAll
()
.
and
().
formLogin
()
.
usernameParameter
(
"email"
)
.
defaultSuccessUrl
(
"/index"
)
.
permitAll
()
.
and
()
.
logout
().
logoutSuccessUrl
(
"/"
).
permitAll
();
}
}
SkuciSe/src/main/java/com/example/SkuciSe/controller/AppController.java
View file @
a4497676
package
com
.
example
.
SkuciSe
.
controller
;
import
com.example.SkuciSe.model.korisnik.Korisnik
;
import
com.example.SkuciSe.model.korisnik.KorisnikDetails
;
import
com.example.SkuciSe.repository.KorisnikRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.core.annotation.AuthenticationPrincipal
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.GetMapping
;
...
...
@@ -16,27 +18,29 @@ public class AppController
KorisnikRepository
kRepo
;
@GetMapping
({
"/"
,
""
,
"/index"
})
public
String
getIndex
(
Model
model
)
public
String
getIndex
(
Model
model
,
@AuthenticationPrincipal
KorisnikDetails
korisnik
)
{
model
.
addAttribute
(
"loggedUser"
,
korisnik
);
return
(
"index"
);
}
@GetMapping
(
"/login"
)
public
String
getLogin
(
Model
model
)
{
model
.
addAttribute
(
"newUser"
,
new
Korisnik
());
return
(
"login"
);
}
@GetMapping
(
"/register"
)
public
String
getRegister
(
Model
model
)
{
model
.
addAttribute
(
"newUser"
,
new
Korisnik
());
return
(
"register"
);
}
@PostMapping
(
"/register-proccess"
)
public
String
postRegisterProccess
(
@ModelAttribute
Korisnik
korisnik
)
{
System
.
out
.
println
(
korisnik
);
kRepo
.
insert
(
korisnik
);
return
(
"redirect:/login"
);
}
...
...
SkuciSe/src/main/java/com/example/SkuciSe/model/korisnik/KorisnikDetails.java
deleted
100644 → 0
View file @
9415f63c
package
com
.
example
.
SkuciSe
.
model
.
korisnik
;
import
org.springframework.security.core.GrantedAuthority
;
import
org.springframework.security.core.userdetails.UserDetails
;
import
java.util.Collection
;
public
class
KorisnikDetails
implements
UserDetails
{
private
Korisnik
korisnik
;
public
Korisnik
getKorisnik
()
{
return
korisnik
;
}
public
KorisnikDetails
(
Korisnik
user
)
{
this
.
korisnik
=
korisnik
;
}
@Override
public
Collection
<?
extends
GrantedAuthority
>
getAuthorities
()
{
return
null
;
}
@Override
public
String
getPassword
()
{
return
korisnik
.
getEmail
();
}
@Override
public
String
getUsername
()
{
return
korisnik
.
getEmail
();
}
@Override
public
boolean
isAccountNonExpired
()
{
return
true
;
}
@Override
public
boolean
isAccountNonLocked
()
{
return
true
;
}
@Override
public
boolean
isCredentialsNonExpired
()
{
return
true
;
}
@Override
public
boolean
isEnabled
()
{
return
true
;
}
}
SkuciSe/src/main/java/com/example/SkuciSe/model/korisnik/KorisnikDetailsService.java
deleted
100644 → 0
View file @
9415f63c
package
com
.
example
.
SkuciSe
.
model
.
korisnik
;
import
com.example.SkuciSe.repository.KorisnikRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.core.userdetails.UserDetails
;
import
org.springframework.security.core.userdetails.UserDetailsService
;
import
org.springframework.security.core.userdetails.UsernameNotFoundException
;
public
class
KorisnikDetailsService
implements
UserDetailsService
{
@Autowired
KorisnikRepository
kRepo
;
@Override
public
UserDetails
loadUserByUsername
(
String
email
)
throws
UsernameNotFoundException
{
Korisnik
korisnik
=
kRepo
.
findByEmail
(
email
);
if
(
korisnik
!=
null
)
{
return
new
KorisnikDetails
(
korisnik
);
}
return
null
;
}
}
SkuciSe/src/main/java/com/example/SkuciSe/repository/KorisnikRepository.java
View file @
a4497676
package
com
.
example
.
SkuciSe
.
repository
;
import
com.example.SkuciSe.model.korisnik.Korisnik
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
;
import
org.springframework.stereotype.Component
;
import
java.sql.*
;
...
...
@@ -22,7 +24,7 @@ public class KorisnikRepository
public
void
insert
(
Korisnik
korisnik
)
{
String
sql
=
"insert into korisnik( ime, prezime, telefon, email, sifra, tipId) values('"
+
korisnik
.
getIme
()+
"','"
+
korisnik
.
getPrezime
()+
"','"
+
korisnik
.
getTelefon
()+
"','"
+
korisnik
.
getEmail
()+
"','"
+
korisnik
.
getSifra
(
)+
"',1)"
;
String
sql
=
"insert into korisnik( ime, prezime, telefon, email, sifra, tipId) values('"
+
korisnik
.
getIme
()+
"','"
+
korisnik
.
getPrezime
()+
"','"
+
korisnik
.
getTelefon
()+
"','"
+
korisnik
.
getEmail
()+
"','"
+
new
BCryptPasswordEncoder
().
encode
(
korisnik
.
getSifra
()
)+
"',1)"
;
try
{
statement
.
executeUpdate
(
sql
);
}
catch
(
SQLException
e
)
{
...
...
SkuciSe/src/main/resources/templates/index.html
View file @
a4497676
...
...
@@ -15,7 +15,7 @@
<link
href=
"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css"
rel=
"stylesheet"
integrity=
"sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx"
crossorigin=
"anonymous"
>
<!-- Core theme CSS (includes Bootstrap)-->
<link
href=
"
../static
/css/style.css"
rel=
"stylesheet"
/>
<link
href=
"/css/style.css"
rel=
"stylesheet"
/>
</head>
...
...
@@ -23,7 +23,7 @@
<header>
<nav>
<ul>
<li><a
href=
"index.html
"
>
Pocetna
</a></li>
<li><a
th:href=
"@{/index}
"
>
Pocetna
</a></li>
<li><a
href=
"#"
>
Kategorije
</a></li>
<li><a
href=
"#"
>
O nama
</a></li>
</ul>
...
...
@@ -31,14 +31,17 @@
<!--<img src="../static/images/logo.png" alt="Logo">-->
<div
id=
"navbar-login"
>
<ul>
<li><a
href=
"login.html
"
><i
class=
"fas fa-sign-in-alt"
></i><span
style=
"padding:5px;"
>
Uloguj se
</span></a></li>
<li><a
href=
"register.html
"
><i
class=
"fa-solid fa-circle-user"
></i><span
style=
"padding:5px;"
>
Registruj se
</span></a></li>
<li><a
th:href=
"@{/login}
"
><i
class=
"fas fa-sign-in-alt"
></i><span
style=
"padding:5px;"
>
Uloguj se
</span></a></li>
<li><a
th:href=
"@{/register}
"
><i
class=
"fa-solid fa-circle-user"
></i><span
style=
"padding:5px;"
>
Registruj se
</span></a></li>
<li><button
type=
"button"
class=
"btn btn-primary btn-md"
><i
class=
"fa-regular fa-message"
></i>
Postavite novi oglas
</button></li>
</ul>
</div>
</header>
<div
id=
"pozadina"
>
<h1>
Find your next home
</h1>
<h1
th:object=
"${loggedUser}"
>
<span
th:if=
"${loggedUser == null}"
>
Uloguj se
</span>
<span
th:if=
"${loggedUser != null}"
th:text=
"loggedUser.getKorisnik().getIme()"
></span>
</h1>
</div>
<footer
class=
"text-center text-white fixed-bottom"
style=
"background-color: #21081a;"
>
...
...
@@ -51,6 +54,6 @@
</footer>
<script
src=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
></script>
<script
src=
"https://kit.fontawesome.com/51d1fadef3.js"
crossorigin=
"anonymous"
></script>
<script
src=
"
../static
/js/main.js"
></script>
<script
src=
"/js/main.js"
></script>
</body>
</html>
SkuciSe/src/main/resources/templates/login.html
View file @
a4497676
...
...
@@ -15,7 +15,7 @@
<link
href=
"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css"
rel=
"stylesheet"
integrity=
"sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx"
crossorigin=
"anonymous"
>
<!-- Core theme CSS (includes Bootstrap)-->
<link
href=
"
../static
/css/style.css"
rel=
"stylesheet"
/>
<link
href=
"/css/style.css"
rel=
"stylesheet"
/>
</head>
...
...
@@ -23,7 +23,7 @@
<header>
<nav>
<ul>
<li><a
href=
"index.html
"
>
Pocetna
</a></li>
<li><a
th:href=
"@{/index}
"
>
Pocetna
</a></li>
<li><a
href=
"#"
>
Kategorije
</a></li>
<li><a
href=
"#"
>
O nama
</a></li>
</ul>
...
...
@@ -31,8 +31,8 @@
<!--<img src="../static/images/logo.png" alt="Logo">-->
<div
id=
"navbar-login"
>
<ul>
<li><a
href=
"login.html
"
><i
class=
"fas fa-sign-in-alt"
></i><span
style=
"padding:5px;"
>
Uloguj se
</span></a></li>
<li><a
href=
"register.html
"
><i
class=
"fa-solid fa-circle-user"
></i><span
style=
"padding:5px;"
>
Registruj se
</span></a></li>
<li><a
th:href=
"@{/login}
"
><i
class=
"fas fa-sign-in-alt"
></i><span
style=
"padding:5px;"
>
Uloguj se
</span></a></li>
<li><a
th:href=
"@{/register}
"
><i
class=
"fa-solid fa-circle-user"
></i><span
style=
"padding:5px;"
>
Registruj se
</span></a></li>
<li><button
type=
"button"
class=
"btn btn-primary btn-md"
><i
class=
"fa-regular fa-message"
></i>
Postavite novi oglas
</button></li>
</ul>
</div>
...
...
@@ -44,7 +44,7 @@
<div
class=
"form-content"
>
<div
class=
"form-items"
>
<h3>
Prijavi se
</h3>
<form
class=
"requires-validation"
novalidate
>
<form
class=
"requires-validation"
novalidate
th:action=
"@{/login}"
method=
"POST"
>
<div
class=
"col-md-12"
>
<input
class=
"form-control"
type=
"text"
name=
"email"
placeholder=
"Email"
required
>
...
...
@@ -88,6 +88,6 @@
</div>
<script
src=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
></script>
<script
src=
"https://kit.fontawesome.com/51d1fadef3.js"
crossorigin=
"anonymous"
></script>
<script
src=
"
../static
/js/main.js"
></script>
<script
src=
"/js/main.js"
></script>
</body>
</html>
SkuciSe/src/main/resources/templates/register.html
View file @
a4497676
...
...
@@ -15,7 +15,7 @@
<link
href=
"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css"
rel=
"stylesheet"
integrity=
"sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx"
crossorigin=
"anonymous"
>
<!-- Core theme CSS (includes Bootstrap)-->
<link
href=
"
../static
/css/style.css"
rel=
"stylesheet"
/>
<link
href=
"/css/style.css"
rel=
"stylesheet"
/>
</head>
...
...
@@ -23,7 +23,7 @@
<header>
<nav>
<ul>
<li><a
href=
"index.html
"
>
Pocetna
</a></li>
<li><a
th:href=
"@{/index}
"
>
Pocetna
</a></li>
<li><a
href=
"#"
>
Kategorije
</a></li>
<li><a
href=
"#"
>
O nama
</a></li>
</ul>
...
...
@@ -31,8 +31,8 @@
<!--<img src="../static/images/logo.png" alt="Logo">-->
<div
id=
"navbar-login"
>
<ul>
<li><a
href=
"login.html
"
><i
class=
"fas fa-sign-in-alt"
></i><span
style=
"padding:5px;"
>
Uloguj se
</span></a></li>
<li><a
href=
"register.html
"
><i
class=
"fa-solid fa-circle-user"
></i><span
style=
"padding:5px;"
>
Registruj se
</span></a></li>
<li><a
th:href=
"@{/login}
"
><i
class=
"fas fa-sign-in-alt"
></i><span
style=
"padding:5px;"
>
Uloguj se
</span></a></li>
<li><a
th:href=
"@{/register}
"
><i
class=
"fa-solid fa-circle-user"
></i><span
style=
"padding:5px;"
>
Registruj se
</span></a></li>
<li><button
type=
"button"
class=
"btn btn-primary btn-md"
><i
class=
"fa-regular fa-message"
></i>
Postavite novi oglas
</button></li>
</ul>
</div>
...
...
@@ -45,28 +45,28 @@
<div
class=
"form-items"
>
<h3>
Registrujte se
</h3>
<p>
Popunite podatke ispod.
</p>
<form
class=
"requires-validation"
novalidate
>
<form
class=
"requires-validation"
novalidate
th:object=
"${newUser}"
method=
"POST"
th:action=
"@{/register-proccess}"
>
<div
class=
"col-md-12"
>
<input
class=
"form-control"
type=
"text"
name=
"name"
placeholder=
"Ime"
required
>
<input
th:field=
"${newUser.ime}"
class=
"form-control"
type=
"text"
name=
"name"
placeholder=
"Ime"
required
>
<div
class=
"valid-feedback"
>
Dobro ime!
</div>
<div
class=
"invalid-feedback"
>
Ime ne sme biti prazno!
</div>
</div>
<div
class=
"col-md-12"
>
<input
class=
"form-control"
type=
"text"
name=
"surname"
placeholder=
"Prezime"
required
>
<input
th:field=
"${newUser.prezime}"
class=
"form-control"
type=
"text"
name=
"surname"
placeholder=
"Prezime"
required
>
<div
class=
"valid-feedback"
>
Dobro prezime!
</div>
<div
class=
"invalid-feedback"
>
Prezime ne sme biti prazno!
</div>
</div>
<div
class=
"col-md-12"
>
<input
class=
"form-control"
type=
"text"
name=
"phone"
placeholder=
"Broj telefona"
required
>
<input
th:field=
"${newUser.telefon}"
class=
"form-control"
type=
"text"
name=
"phone"
placeholder=
"Broj telefona"
required
>
<div
class=
"valid-feedback"
>
Dobar broj!
</div>
<div
class=
"invalid-feedback"
>
Broj telefona ne sme biti prazan!
</div>
</div>
<div
class=
"col-md-12"
>
<input
class=
"form-control"
type=
"email"
name=
"email"
placeholder=
"E-mail Adresa"
required
>
<input
th:field=
"${newUser.email}"
class=
"form-control"
type=
"email"
name=
"email"
placeholder=
"E-mail Adresa"
required
>
<div
class=
"valid-feedback"
>
Dobar email!
</div>
<div
class=
"invalid-feedback"
>
Email ne sme biti prazan!
</div>
</div>
...
...
@@ -74,7 +74,7 @@
<div
class=
"col-md-12"
>
<input
class=
"form-control"
type=
"password"
name=
"password"
placeholder=
"Sifra"
required
>
<input
th:field=
"${newUser.sifra}"
class=
"form-control"
type=
"password"
name=
"password"
placeholder=
"Sifra"
required
>
<div
class=
"valid-feedback"
>
Dobra sifra!
</div>
<div
class=
"invalid-feedback"
>
Sifra ne sme biti prazna!
</div>
</div>
...
...
@@ -116,7 +116,7 @@
</div>
<script
src=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
></script>
<script
src=
"https://kit.fontawesome.com/51d1fadef3.js"
crossorigin=
"anonymous"
></script>
<script
src=
"
../static
/js/main.js"
></script>
<script
src=
"/js/main.js"
></script>
<!-- Core theme JS-->
</body>
</html>
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