Skip to content

Commit a9e7f1c

Browse files
committed
Initial Commit
1 parent 400c4ea commit a9e7f1c

File tree

15 files changed

+193
-10
lines changed

15 files changed

+193
-10
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424
<artifactId>spring-boot-starter-web</artifactId>
2525
</dependency>
2626

27+
<dependency>
28+
<groupId>com.fasterxml.jackson.dataformat</groupId>
29+
<artifactId>jackson-dataformat-xml</artifactId>
30+
</dependency>
31+
2732
<dependency>
2833
<groupId>org.springframework.boot</groupId>
2934
<artifactId>spring-boot-starter-data-jpa</artifactId>

src/main/java/com/webservice/mobile/app/MobileAppWebServicesApplication.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.webservice.mobile.app;
22

3+
import com.webservice.mobile.app.security.AppProperties;
34
import org.springframework.boot.SpringApplication;
45
import org.springframework.boot.autoconfigure.SpringBootApplication;
56
import org.springframework.context.annotation.Bean;
@@ -22,4 +23,9 @@ public SpringApplicationContext springApplicationContext(){
2223
return new SpringApplicationContext();
2324
}
2425

26+
@Bean(name = "AppProperties")
27+
public AppProperties getAppProperties(){
28+
return new AppProperties();
29+
}
30+
2531
}

src/main/java/com/webservice/mobile/app/SpringApplicationContext.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.webservice.mobile.app;
22

3+
import com.webservice.mobile.app.security.AppProperties;
34
import org.springframework.beans.BeansException;
45
import org.springframework.context.ApplicationContext;
56
import org.springframework.context.ApplicationContextAware;
7+
import org.springframework.context.annotation.Bean;
68

79
public class SpringApplicationContext implements ApplicationContextAware {
810

@@ -16,4 +18,6 @@ public void setApplicationContext(ApplicationContext applicationContext) throws
1618
public static Object getBean(String beanName){
1719
return CONTEXT.getBean(beanName);
1820
}
21+
22+
1923
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.webservice.mobile.app.exceptions;
2+
3+
import com.webservice.mobile.app.service.UserService;
4+
5+
public class UserServiceException extends RuntimeException{
6+
7+
private static final long serialVersionUID = 134877110171435607L;
8+
9+
public UserServiceException(String message){
10+
super(message);
11+
}
12+
}

src/main/java/com/webservice/mobile/app/io/repositories/UserRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ public interface UserRepository extends CrudRepository<UserEntity,Long> {
1010

1111
UserEntity findUserByEmail(String email);
1212

13+
UserEntity findByUserId(String userId);
1314
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.webservice.mobile.app.security;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.core.env.Environment;
6+
import org.springframework.stereotype.Component;
7+
8+
@Component
9+
public class AppProperties {
10+
11+
@Autowired
12+
private Environment environment;
13+
14+
public String getTokenSecret(){
15+
16+
return environment.getProperty("tokenSecret");
17+
}
18+
}

src/main/java/com/webservice/mobile/app/security/AuthenticationFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ protected void successfulAuthentication(HttpServletRequest request,
6464
String token = Jwts.builder()
6565
.setSubject(userName)
6666
.setExpiration(new Date(System.currentTimeMillis()+SecurityConstants.EXPIRATION_TIME))
67-
.signWith(SignatureAlgorithm.HS512,SecurityConstants.TOKEN_SECRET)
67+
.signWith(SignatureAlgorithm.HS512,SecurityConstants.getTokenSecret())
6868
.compact();
6969

7070
UserService userService = (UserService) SpringApplicationContext.getBean("userServiceImpl");
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.webservice.mobile.app.security;
2+
3+
4+
import io.jsonwebtoken.Jwts;
5+
import org.springframework.security.authentication.AuthenticationManager;
6+
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
7+
import org.springframework.security.core.context.SecurityContextHolder;
8+
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
9+
10+
import javax.servlet.FilterChain;
11+
import javax.servlet.ServletException;
12+
import javax.servlet.http.HttpServletRequest;
13+
import javax.servlet.http.HttpServletResponse;
14+
import java.io.IOException;
15+
import java.util.ArrayList;
16+
17+
public class AuthorizationFilter extends BasicAuthenticationFilter {
18+
19+
public AuthorizationFilter (AuthenticationManager authenticationManager){
20+
super(authenticationManager);
21+
}
22+
23+
@Override
24+
protected void doFilterInternal(HttpServletRequest request,
25+
HttpServletResponse response,
26+
FilterChain chain) throws IOException,
27+
ServletException {
28+
29+
String header = request.getHeader(SecurityConstants.HEADER_STRING);
30+
if (header == null|| !header.startsWith(SecurityConstants.TOKEN_PREFIX)){
31+
chain.doFilter(request,response);
32+
return;
33+
}
34+
UsernamePasswordAuthenticationToken authenticationToken =getAuthentication(request);
35+
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
36+
chain.doFilter(request,response);
37+
38+
39+
40+
}
41+
42+
private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {
43+
String token = request.getHeader(SecurityConstants.HEADER_STRING);
44+
if (token != null) {
45+
token = token.replace(SecurityConstants.TOKEN_PREFIX, "");
46+
47+
String user = Jwts.parser()
48+
.setSigningKey(SecurityConstants.getTokenSecret())
49+
.parseClaimsJws(token)
50+
.getBody()
51+
.getSubject();
52+
53+
if (user != null) {
54+
return new UsernamePasswordAuthenticationToken(user, null, new ArrayList<>());
55+
56+
}
57+
58+
return null;
59+
}
60+
return null;
61+
}
62+
63+
}
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
package com.webservice.mobile.app.security;
22

3+
import com.webservice.mobile.app.SpringApplicationContext;
4+
5+
36
public class SecurityConstants {
47
public static final long EXPIRATION_TIME = 864000000; //Validity 10 Days
58
public static final String TOKEN_PREFIX = "Bearer";
69
public static final String HEADER_STRING = "Authorization";
710
public static final String SIGN_UP_URL = "/users";
8-
public static final String TOKEN_SECRET = "jf9i4jgu83nfl0";
11+
12+
public static String getTokenSecret(){
13+
AppProperties appProperties = (AppProperties) SpringApplicationContext.
14+
getBean("AppProperties");
15+
return appProperties.getTokenSecret();
16+
}
917
}

src/main/java/com/webservice/mobile/app/security/WebSecurity.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.webservice.mobile.app.security;
22

3+
34
import com.webservice.mobile.app.service.UserService;
45
import org.springframework.http.HttpMethod;
56
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
67
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
78
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
89
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
10+
import org.springframework.security.config.http.SessionCreationPolicy;
911
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
1012

1113
@EnableWebSecurity
@@ -22,12 +24,21 @@ public WebSecurity(UserService userService, BCryptPasswordEncoder bCryptPassword
2224
protected void configure(HttpSecurity httpSecurity)throws Exception{
2325
httpSecurity.csrf().disable().authorizeRequests()
2426
.antMatchers(HttpMethod.POST,SecurityConstants.SIGN_UP_URL)
25-
.permitAll().anyRequest().authenticated().and()
26-
.addFilter(new AuthenticationFilter(authenticationManager()));
27+
.permitAll().anyRequest().authenticated()
28+
.and()
29+
.addFilter(getAuthenticationFilter())
30+
.addFilter(new AuthorizationFilter(authenticationManager()))
31+
.sessionManagement()
32+
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
2733
}
2834

2935
@Override
3036
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
3137
auth.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder);
3238
}
39+
public AuthenticationFilter getAuthenticationFilter() throws Exception{
40+
final AuthenticationFilter filter = new AuthenticationFilter(authenticationManager());
41+
filter.setFilterProcessesUrl("/users/login");
42+
return filter;
43+
}
3344
}

0 commit comments

Comments
 (0)