Browse Source

登陆接口

main
maochaoying 2 years ago
parent
commit
1cc17ed0f4
  1. 10
      pom.xml
  2. 2
      src/main/java/com/iflytop/nuclear/config/SecurityConfig.java
  3. 4
      src/main/java/com/iflytop/nuclear/controller/AccountController.java
  4. 10
      src/main/java/com/iflytop/nuclear/entity/JwtUser.java
  5. 4
      src/main/java/com/iflytop/nuclear/exception/JWTAccessDeniedHandler.java
  6. 4
      src/main/java/com/iflytop/nuclear/exception/JWTAuthenticationEntryPoint.java
  7. 6
      src/main/java/com/iflytop/nuclear/filter/JWTAuthenticationFilter.java
  8. 2
      src/main/java/com/iflytop/nuclear/service/impl/AccountServiceImpl.java

10
pom.xml

@ -32,6 +32,11 @@
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.26</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
@ -42,6 +47,11 @@
<optional>true</optional>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

2
src/main/java/com/iflytop/nuclear/config/SecurityConfig.java

@ -46,7 +46,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
http.cors().and().csrf().disable()
.authorizeRequests()
// 注册接口需要ADMIN用户才能访问
.antMatchers("/account/register").hasRole("ADMIN")
// .antMatchers("/account/register").hasRole("ADMIN")
// 其他都放行了
.anyRequest().permitAll()
.and()

4
src/main/java/com/iflytop/nuclear/controller/AccountController.java

@ -17,6 +17,7 @@ import java.util.Map;
*/
@Slf4j
@RestController
@CrossOrigin
@RequestMapping("/account")
public class AccountController {
@ -43,7 +44,7 @@ public class AccountController {
* @return
*/
@PostMapping("/register")
@PreAuthorize("hasRole('ADMIN')")
// @PreAuthorize("hasRole('ADMIN')")
public ResponseData registerAccount(@RequestBody Map<String,String> registerUser) {
log.info("-----------------注册账户开始-----------------");
boolean register = accountService.register(registerUser.get("username"), registerUser.get("password"));
@ -53,4 +54,5 @@ public class AccountController {
}
return ResponseData.fail("注册失败");
}
}

10
src/main/java/com/iflytop/nuclear/entity/JwtUser.java

@ -24,10 +24,12 @@ public class JwtUser implements UserDetails {
// 写一个能直接使用user创建jwtUser的构造器
public JwtUser(Account user) {
id = user.getId();
username = user.getUsername();
password = user.getPassword();
authorities = Collections.singleton(new SimpleGrantedAuthority(user.getRole()));
if (user != null) {
id = user.getId();
username = user.getUsername();
password = user.getPassword();
authorities = Collections.singleton(new SimpleGrantedAuthority(user.getRole()));
}
}
@Override

4
src/main/java/com/iflytop/nuclear/exception/JWTAccessDeniedHandler.java

@ -1,6 +1,8 @@
package com.iflytop.nuclear.exception;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.iflytop.nuclear.utils.ResponseData;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
@ -20,6 +22,6 @@ public class JWTAccessDeniedHandler implements AccessDeniedHandler {
httpServletResponse.setContentType("application/json; charset=utf-8");
httpServletResponse.setStatus(HttpServletResponse.SC_FORBIDDEN);
String reason = "统一处理,原因:" + e.getMessage();
httpServletResponse.getWriter().write(new ObjectMapper().writeValueAsString(reason));
httpServletResponse.getWriter().write(JSONObject.toJSONString(ResponseData.fail(reason)));
}
}

4
src/main/java/com/iflytop/nuclear/exception/JWTAuthenticationEntryPoint.java

@ -1,6 +1,8 @@
package com.iflytop.nuclear.exception;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.iflytop.nuclear.utils.ResponseData;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
@ -23,6 +25,6 @@ public class JWTAuthenticationEntryPoint implements AuthenticationEntryPoint {
response.setContentType("application/json; charset=utf-8");
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
String reason = "统一处理,原因:" + authException.getMessage();
response.getWriter().write(new ObjectMapper().writeValueAsString(reason));
response.getWriter().write(JSONObject.toJSONString(ResponseData.fail(reason)));
}
}

6
src/main/java/com/iflytop/nuclear/filter/JWTAuthenticationFilter.java

@ -1,9 +1,11 @@
package com.iflytop.nuclear.filter;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.iflytop.nuclear.entity.JwtUser;
import com.iflytop.nuclear.model.Account;
import com.iflytop.nuclear.utils.JwtTokenUtils;
import com.iflytop.nuclear.utils.ResponseData;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
@ -68,6 +70,10 @@ public class JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilte
// 但是这里创建的token只是单纯的token
// 按照jwt的规定最后请求的时候应该是 `Bearer token`
response.setHeader("token", JwtTokenUtils.TOKEN_PREFIX + token);
JSONObject res = new JSONObject();
res.put("token", JwtTokenUtils.TOKEN_PREFIX + token);
res.put("username", jwtUser.getUsername());
response.getWriter().write(JSONObject.toJSONString(ResponseData.success(res)));
}
@Override

2
src/main/java/com/iflytop/nuclear/service/impl/AccountServiceImpl.java

@ -31,7 +31,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
Account account = Account.builder()
.username(username)
.password(bCryptPasswordEncoder.encode(password))
.role("ROLE_USER")
.role("ROLE_ADMIN")
.build();
return this.save(account);
}

Loading…
Cancel
Save