前言
提示:这里只是记录一下自己做毕业设计的思路,前端采用vue,后端用springCloud
一、拦截器
@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {
@Autowired
JwtInterceptor jwtInterceptor;
protected void addInterceptors(InterceptorRegistry registry) {
//注册拦截器 先执行拦截器
registry.addInterceptor(jwtInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/**/login/**");
}
/**
* 跨域访问配置接口
* @param registry
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
.allowCredentials(true)
.allowedHeaders("*")
.maxAge(3600);
}
}
拦截器主要是对登录不做拦截,其他方法都会去鉴权,下面是跨域访问,项目主要是前后分离项目,可能设计到跨域问题,先放这里,用不用无所谓
二、过滤器
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/**").permitAll()
.anyRequest().authenticated()
.and().csrf().disable();
}
}
三、JWT鉴权
@Component
public class JwtInterceptor implements HandlerInterceptor {
@Autowired
JwtUtil jwtUtil;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String header = request.getHeader("Authorization");
if (header != null && !"".equals(header)) {
//如果包含有Authorization头信息,就对其进行解析
if (header.startsWith("Bearer ")) {
//得到token
String token = header.substring(7);
//对令牌进行验证
try {
Claims claims = jwtUtil.parseJWT(token);
String roles = (String) claims.get("roles");
if (roles != null && roles.equals("admin")) {
request.setAttribute("claims_admin", token);
}
if (roles != null && roles.equals("user")) {
request.setAttribute("claims_user", token);
}
} catch (Exception e) {
throw new RuntimeException("令牌有误");
}
}
}
return true;
}
}
JWT的鉴权工具类一搜一大推,这是主要是在方法执行前对header里面的字段进行验证,验证是否过期,信息匹配是否一直,是否有权限,验证成功之后就可以就进行响应的业务处理
总结
提示:登录鉴权是一个项目的对用户权限的一个验证,也能保证用户相应的敏感信息不被暴漏