提交 43c378c0 authored 作者: zhangshuang's avatar zhangshuang

Merge branch 'develop' of 192.168.1.249:LJJ/encrypted-file-system into develop

......@@ -28,16 +28,16 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.security</groupId>-->
<!-- <artifactId>spring-security-test</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-security</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>com.zjty</groupId>
......
package com.zjty.efs.user;
import com.zjty.efs.misc.config.AutoDocument;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
......@@ -11,7 +12,8 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
*/
@SpringBootApplication
@ComponentScan(basePackages = {
"com.zjty.efs.misc"
"com.zjty.efs.misc",
"com.zjty.efs.user"
})
@EnableSwagger2
public class UserApplication {
......
package com.zjty.efs.user.config;
import lombok.Data;
/**
* @author mcj
*/
@Data
public class AuthenticationBean {
String username;
String password;
}
package com.zjty.efs.user.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextListener;
import javax.servlet.annotation.WebListener;
/**
* @Author: mcj
* @Date: 19-5-7 下午4:26
* @Version 1.0
*/
@Configuration
@WebListener
public class Listener extends RequestContextListener {
}
package com.zjty.efs.user.config;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author mcj
*/
@Component
public class MyEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {
httpServletResponse.setStatus(403);
httpServletResponse.setContentType("application/json");
httpServletResponse.setCharacterEncoding("utf-8");
httpServletResponse.getWriter().println("{\"code\":403,\"msg\":\"用户未登陆\"}");
}
}
package com.zjty.efs.user.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.MediaType;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Map;
/**
* @author mcj
*/
public class MyFilter extends UsernamePasswordAuthenticationFilter {
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
SecurityContextHolder.clearContext();
//attempt Authentication when Content-Type is json
String contentType = request.getContentType();
Map<String, String[]> parameterMap = request.getParameterMap();
String method = request.getMethod();
Enumeration<String> headerNames = request.getHeaderNames();
if (request.getContentType().equals(MediaType.APPLICATION_JSON_UTF8_VALUE)
|| request.getContentType().equals(MediaType.APPLICATION_JSON_VALUE)) {
//use jackson to deserialize json
ObjectMapper mapper = new ObjectMapper();
UsernamePasswordAuthenticationToken authRequest = null;
try (InputStream is = request.getInputStream()) {
AuthenticationBean authenticationBean = mapper.readValue(is, AuthenticationBean.class);
authRequest = new UsernamePasswordAuthenticationToken(
authenticationBean.getUsername(), authenticationBean.getPassword());
} catch (IOException e) {
e.printStackTrace();
authRequest = new UsernamePasswordAuthenticationToken(
"", "");
}
setDetails(request, authRequest);
return this.getAuthenticationManager().authenticate(authRequest);
} else {
return super.attemptAuthentication(request, response);
}
}
}
package com.zjty.efs.user.config;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;
/**
* @author mcj
*/
@Component
public class MyProvider implements AuthenticationProvider {
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
Object principal = authentication.getPrincipal();
return null;
}
@Override
public boolean supports(Class<?> aClass) {
return true;
}
}
package com.zjty.efs.user.config;
import com.zjty.efs.user.subject.entity.User;
import com.zjty.efs.user.subject.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @author mcj
*/
@Service
public class MyUserDetailsServiceImpl implements UserDetailsService {
private BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
return null;
}
// @Autowired
// IUserService iUserService;
// @Autowired
// IRoleService iRoleService;
// @Autowired
// IAuthorityService iAuthorityService;
// @Autowired
// private UserService userService;
// @Override
// public UserDetails loadUserByUsername(Integer id) throws UsernameNotFoundException {
// System.out.println("userService验证:" + id);
// User user = userService.findById(id);
//
// if(user!=null && user.getClock()!=1){
// user.setUsername(username);
// user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
// ArrayList<SimpleGrantedAuthority> list = new ArrayList<>();
// String id = user.getRoleId();
// Role role = iRoleService.findRoleById(id);
// List<Authority> authorityByIds = iAuthorityService.findAuthorityByIds(role.getAuthorityIds());
// SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority("ROLE_" + role.getName());
// list.add(simpleGrantedAuthority);
// authorityByIds.forEach(authority -> {
// list.add(new SimpleGrantedAuthority(authority.getName()));
// });
// user.setArrayList(list);
// return user;
// }else{
// return new User();
// }
// }
}
package com.zjty.efs.user.config;
import com.zjty.efs.user.config.handler.MyAccessHandler;
import com.zjty.efs.user.config.handler.MyFailHandler;
import com.zjty.efs.user.config.handler.MyLogoutHandler;
import com.zjty.efs.user.config.handler.MySuccessHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
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.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.session.SessionRegistry;
import org.springframework.security.core.session.SessionRegistryImpl;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.access.channel.ChannelProcessingFilter;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* @author mcj
*/
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public MyProvider myProvider;
@Autowired
private MyAccessHandler accessHandler;
@Autowired
private MyEntryPoint myEntryPoint;
@Autowired
private MyUserDetailsServiceImpl myUserDetailsServiceImpl;
@Autowired
private MyLogoutHandler myLogoutHandler;
@Autowired
private MySuccessHandler successHandler;
@Autowired
private MyFailHandler failHandler;
@Override
public void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.cors().and()
.authorizeRequests()
// .requestMatchers(CorsUtils::isPreFlightRequest).permitAll()
.antMatchers(HttpMethod.DELETE, "/pas/user/delete/**").hasAuthority("deleteUser")
.antMatchers(HttpMethod.POST, "/pas/user").hasAuthority("addUser")
.antMatchers(HttpMethod.PUT, "/pas/user").hasAuthority("updateUser")
.antMatchers(HttpMethod.POST, "/pas/department").hasAuthority("system")
.antMatchers(HttpMethod.POST, "/pas/role").hasAuthority("system")
.antMatchers(HttpMethod.GET, "/pas/authority").hasAuthority("system")
.antMatchers(HttpMethod.POST, "/pas/group").hasAuthority("system")
.antMatchers(HttpMethod.OPTIONS,"/**").permitAll()
.antMatchers("/pas/count").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginProcessingUrl("/userLogin")
.and()
.logout()
.logoutUrl("/userLogout")
//.logoutSuccessUrl("/userLogout")
.logoutSuccessHandler(myLogoutHandler)
.deleteCookies("JESSIONID")
.permitAll()
.and()
.exceptionHandling()
.accessDeniedHandler(accessHandler)
.authenticationEntryPoint(myEntryPoint)
.and()
.addFilterAt(myFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(corsFilter(), ChannelProcessingFilter.class)
.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).disable().sessionManagement().maximumSessions(1).expiredUrl("/userLogout").sessionRegistry(sessionRegistry())
;
}
@Override
public void configure(WebSecurity web) throws Exception {
//swagger静态资源访问
web.ignoring().antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources", "/configuration/security", "/swagger-ui.html", "/webjars/**","/swagger-resources/configuration/ui","/swagge‌​r-ui.html");
}
@Bean
public MyFilter myFilter() throws Exception {
MyFilter filter = new MyFilter();
filter.setAuthenticationSuccessHandler(successHandler);
filter.setAuthenticationFailureHandler(failHandler);
filter.setFilterProcessesUrl("/userLogin");
filter.setAuthenticationManager(this.authenticationManager());
return filter;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(myUserDetailsServiceImpl);
// auth.authenticationProvider(myProvider);
// auth.inMemoryAuthentication().withUser("root").password(bCryptPasswordEncoder().encode("root")).roles("admin").authorities("addUser","deleteUser","updateUser","system");
}
@Bean
public SessionRegistry sessionRegistry(){
return new SessionRegistryImpl();
}
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
final CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowCredentials(true);
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
package com.zjty.efs.user.config.handler;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author mcj
*/
@Component
public class MyAccessHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException e) throws IOException, ServletException {
httpServletResponse.setStatus(403);
httpServletResponse.setCharacterEncoding("utf-8");
httpServletResponse.setContentType("application/json");
httpServletResponse.getWriter().println("{\"code\":403,\"msg\":\"没有权限访问接口\"}");
}
}
package com.zjty.efs.user.config.handler;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author mcj
*/
@Component
public class MyFailHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {
httpServletResponse.setStatus(200);
httpServletResponse.setCharacterEncoding("utf-8");
httpServletResponse.setContentType("application/json");
httpServletResponse.getWriter().println("{\"code\":401,\"msg\":\"用户登陆失败\"}");
}
}
package com.zjty.efs.user.config.handler;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
/**
* @Author: mcj
* @Date: 19-5-31 下午2:10
* @Version 1.0
*/
@Component
public class MyLogoutHandler implements LogoutSuccessHandler {
@Override
public void onLogoutSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
httpServletResponse.setStatus(200);
httpServletResponse.setCharacterEncoding("utf-8");
Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
httpServletResponse.setContentType("application/json");
try {
httpServletResponse.getWriter().println("{\"code\":200,\"msg\":\"用户登出成功\"}");
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.zjty.efs.user.config.handler;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.session.SessionInformation;
import org.springframework.security.core.session.SessionRegistry;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @author mcj
*/
@Component
@Slf4j
public class MySuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
}
// @Autowired
// private SessionRegistry sessionRegistry;
//
// @Autowired
// private IAuthorityService iAuthorityService;
//
// @Autowired
// IRoleService iRoleService;
//
// @Autowired
// IMenuSerivce iMenuSerivce;
//
// private BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
//
// @Autowired
// IUserService iUserService;
//
// @Autowired
// RedisTemplate redisTemplate;
//
// @Override
// public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
// Cookie[] cookies = httpServletRequest.getCookies();
// if(cookies==null){
// return;
// }
// String value = cookies[0].getValue();
// List<Object> o = sessionRegistry.getAllPrincipals();
// User user = (User) authentication.getPrincipal();
// for (Object principal : o) {
// User cacheUser = (User) principal;
// if (cacheUser.getUsername().equals(user.getUsername())) {
// log.info("当前用户已经在线上.现顶替:{}",user.getUsername());
// List<SessionInformation> sessions = sessionRegistry.getAllSessions(cacheUser, false);
// for (SessionInformation sessionInformation : sessions) {
// String sessionId = sessionInformation.getSessionId();
//
// sessionInformation.expireNow();
// }
// }
// }
//
// redisTemplate.opsForValue().set(user.getUsername(),0);
//
// UserVo userVo = new UserVo().user2userVo(user);
// User username = iUserService.findUserByUsername(userVo.getUsername());
// Role role = iRoleService.findRoleById(user.getRoleId());
// RoleVo roleVo = new RoleVo();
// User user1 = iUserService.findUserByUsername(userVo.getUsername());
// userVo.setPassword(user1.getPassword());
// roleVo.setRoleId(user.getRoleId());
// List<Menu> allByMenuId = iMenuSerivce.findAllByMenuId(role.getMenuIds());
// roleVo.setMenus(allByMenuId);
// roleVo.setRoleName(role.getName());
// userVo.setRole(roleVo);
// List<Authority> authorityByIds = iAuthorityService.findAuthorityByIds(role.getAuthorityIds());
// roleVo.setAuthorities(authorityByIds);
//
// sessionRegistry.registerNewSession(value, authentication.getPrincipal());
// httpServletResponse.setStatus(200);
// httpServletResponse.setContentType("application/json; charset=utf-8");
// httpServletResponse.getWriter().println(new ObjectMapper().writeValueAsString(userVo));
//
//
// }
}
package com.zjty.efs.user.subject.controller;
import com.zjty.efs.misc.config.AutoDocument;
import com.zjty.efs.user.subject.entity.User;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.*;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -16,6 +15,8 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@RequestMapping("/api")
@AutoDocument
@Api(tags = "用户模块接口")
public class UserController {
@GetMapping
......
package com.zjty.efs.user.subject.dao;
import com.zjty.efs.user.subject.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-03-24
*/
@Repository
public interface UserDao extends JpaRepository<User, Integer> {
}
......@@ -4,12 +4,15 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.zjty.efs.misc.config.AutoDocument;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.beans.factory.annotation.Autowired;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
......@@ -20,8 +23,11 @@ import java.util.List;
*/
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
@AutoDocument
@ApiModel(value = "用户", description = "用户实体类")
@Table(name = "user")
public class User {
@ApiModelProperty(value = "id",example = "jksdhfjks5")
......@@ -53,9 +59,6 @@ public class User {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date insertTime;
@ApiModelProperty(value = "组id",example = "[1,2,3]")
private List<String> groupId;
@NotNull(message = "部门不可为空")
@ApiModelProperty(value = "部门id",example = "1")
private String departId;
......
......@@ -2,9 +2,15 @@ logging.file=./log/efs.log
spring.main.allow-bean-definition-overriding=true
##连接中心数据库数据库mysql
spring.datasource.url=jdbc:mysql://localhost:3306/efs?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.url=jdbc:mysql://localhost:3306/ty_efs?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=ljj123456
server.port=8081
\ No newline at end of file
# spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.open-in-view=true
server.port=8082
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论