Advertisement
Guest User

Untitled

a guest
Sep 5th, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.61 KB | None | 0 0
  1. @Autowired
  2. private JwtAuthenticationEntryPoint unauthorizedHandler;
  3.  
  4. @Autowired
  5. private UserDetailsService userDetailsService;
  6.  
  7. @Autowired
  8. public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
  9. authenticationManagerBuilder
  10. .userDetailsService(this.userDetailsService)
  11. .passwordEncoder(passwordEncoder());
  12. }
  13.  
  14. @Bean
  15. public PasswordEncoder passwordEncoder() {
  16. return new BCryptPasswordEncoder();
  17. }
  18.  
  19. @Bean
  20. public JwtAuthenticationTokenFilter authenticationTokenFilterBean() throws Exception {
  21. return new JwtAuthenticationTokenFilter();
  22. }
  23.  
  24. @Bean
  25. @Override
  26. public AuthenticationManager authenticationManagerBean() throws Exception {
  27. // TODO Auto-generated method stub
  28. return super.authenticationManagerBean();
  29. }
  30.  
  31. @Override
  32. protected void configure(HttpSecurity httpSecurity) throws Exception {
  33. httpSecurity
  34. // we don't need CSRF because our token is invulnerable
  35. .csrf().disable()
  36.  
  37. .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
  38.  
  39. // don't create session
  40. .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
  41.  
  42. .authorizeRequests()
  43. //.antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
  44.  
  45. // allow anonymous resource requests
  46. .antMatchers(
  47. HttpMethod.GET,
  48. "/",
  49. "/*.html",
  50. "/favicon.ico",
  51. "/**/*.html",
  52. "/**/*.css",
  53. "/**/*.js"
  54. ).permitAll()
  55. .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
  56. .antMatchers("/auth/**").permitAll()
  57. .anyRequest().authenticated();
  58.  
  59. // Custom JWT based security filter
  60. httpSecurity
  61. .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
  62.  
  63. // disable page caching
  64. httpSecurity.headers().cacheControl();
  65. }
  66.  
  67. @Mapper
  68. public interface UserMapper {
  69. User findByUsername(String username);
  70. }
  71.  
  72. @Autowired
  73. private UserDetailsService userDetailsService;
  74.  
  75. @Autowired
  76. private JwtTokenUtil jwtTokenUtil;
  77.  
  78. @Value("${jwt.header}")
  79. private String tokenHeader;
  80.  
  81. @Override
  82. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  83.  
  84. HttpServletRequest httpRequest = (HttpServletRequest) request;
  85. String authToken = httpRequest.getHeader(this.tokenHeader);
  86. // authToken.startsWith("Bearer ")
  87. // String authToken = header.substring(7);
  88. String username = jwtTokenUtil.getUsernameFromToken(authToken);
  89.  
  90. if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
  91. UserDetails userDetails = this.userDetailsService.loadUserByUsername(username);
  92. if (jwtTokenUtil.validateToken(authToken, userDetails)) {
  93. UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
  94. authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpRequest));
  95. SecurityContextHolder.getContext().setAuthentication(authentication);
  96. }
  97. }
  98.  
  99. chain.doFilter(request, response);
  100. }
  101.  
  102. @RequestMapping(value = "${jwt.route.authentication.path}", method = RequestMethod.POST)
  103. public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtAuthenticationRequest authenticationRequest, Device device) throws AuthenticationException {
  104. // Perform the security
  105. final Authentication authentication = authenticationManager.authenticate(
  106. new UsernamePasswordAuthenticationToken(
  107. System.out.println("Username: " + authenticationRequest.getUsername() + " / password: " + authenticationRequest.getPassword());
  108. authenticationRequest.getUsername(),
  109. authenticationRequest.getPassword()
  110. )
  111. );
  112. SecurityContextHolder.getContext().setAuthentication(authentication);
  113.  
  114. // Reload password post-security so we can generate token
  115. final UserDetails userDetails = userDetailsService.loadUserByUsername(authenticationRequest.getUsername());
  116. final String token = jwtTokenUtil.generateToken(userDetails, device);
  117.  
  118. // Return the token
  119. return ResponseEntity.ok(new JwtAuthenticationResponse(token));
  120. }
  121.  
  122. @Service
  123. public class JwtUserDetailsServiceImpl implements UserDetailsService {
  124.  
  125. @Autowired
  126. private UserMapper userMapper;
  127.  
  128. @Override
  129. public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
  130. System.out.println("Username in ServiceImpl: " + username);
  131. User user = userMapper.findByUsername(username);
  132.  
  133. if (user == null) {
  134. throw new UsernameNotFoundException(String.format("No user found with username '%s'.", username));
  135. } else {
  136. return JwtUserFactory.create(user);
  137. }
  138. }
  139.  
  140. server:
  141. contextPath:
  142. spring:
  143. jackson:
  144. serialization:
  145. INDENT_OUTPUT: true
  146.  
  147. datasource:
  148. master:
  149. driver-class-name: "com.mysql.jdbc.Driver"
  150. url: "jdbc:mysql://localhost:3306/test"
  151. user-name: "test"
  152. password: "testtest"
  153.  
  154. jwt:
  155. header: Authorization
  156. secret: mySecret
  157. expiration: 604800
  158. route:
  159. authentication:
  160. path: auth
  161. refresh: refresh
  162.  
  163. logging:
  164. level:
  165. org.springframework:
  166. security: DEBUG
  167.  
  168. <mapper namespace="xxxxxx">
  169. <select id="findByUsername" parameterType="String"
  170. resultType="xxxxxx">
  171. <![CDATA[
  172. SELECT * FROM user WHERE username = #{username}
  173. ]]>
  174. </select>
  175.  
  176. </mapper>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement