前端工程
访问方式
http:/ / 127. 0. 0. 1:8080/context/frontEnd/index
放行
public class SecurityConfig extends WebSecurityConfigurerAdapter {
"/frontEnd/**" ,
SysFrontEndController
import lombok. extern. slf4j. Slf4j ;
import nl. basjes. shaded. org. springframework. core. io. ClassPathResource ;
import nl. basjes. shaded. org. springframework. util. AntPathMatcher ;
import org. springframework. http. MediaType ;
import org. springframework. http. MediaTypeFactory ;
import org. springframework. web. bind. annotation. RequestMapping ;
import org. springframework. web. bind. annotation. RestController ;
import org. springframework. web. servlet. HandlerMapping ;
import javax. servlet. ServletOutputStream ;
import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
import java. io. IOException ;
import java. io. InputStream ;
import java. nio. ByteBuffer ;
import java. nio. channels. Channels ;
import java. nio. charset. Charset ;
import java. util. Optional ;
@RestController
@RequestMapping ( "/frontEnd" )
@Slf4j
public class SysFrontEndController { private AntPathMatcher antPathMatcher = new AntPathMatcher ( ) ; @RequestMapping ( "/**" ) public void getStaticResource ( HttpServletRequest request, HttpServletResponse response) throws IOException { String uri = ( String ) request. getAttribute ( HandlerMapping . PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE ) ; String pattern = ( String ) request. getAttribute ( HandlerMapping . BEST_MATCHING_PATTERN_ATTRIBUTE ) ; String customPath = antPathMatcher. extractPathWithinPattern ( pattern, uri) ; if ( "index" . equals ( customPath) ) customPath = customPath + ".html" ; String [ ] split = customPath. split ( "/" ) ; String filename = split[ split. length - 1 ] ; if ( filename. contains ( ".png" ) || filename. contains ( ".jpg" ) || filename. contains ( ".ico" ) || filename. contains ( ".gif" ) || filename. contains ( ".svg" ) || filename. contains ( ".pdf" ) || filename. contains ( ".jpeg" ) ) { ServletOutputStream outputStream = null ; InputStream inputStream = null ; try { ClassPathResource classPathResource = new ClassPathResource ( "static/" + customPath) ; inputStream = classPathResource. getInputStream ( ) ; response. setContentType ( "image/" + filename. split ( "\\." ) [ 1 ] ) ; outputStream = response. getOutputStream ( ) ; int len; byte [ ] buffer = new byte [ 4096 ] ; while ( ( len = inputStream. read ( buffer) ) != - 1 ) { outputStream. write ( buffer, 0 , len) ; } outputStream. flush ( ) ; } catch ( Exception e) { e. printStackTrace ( ) ; } finally { outputStream. close ( ) ; inputStream. close ( ) ; } } else { InputStream stream = Thread . currentThread ( ) . getContextClassLoader ( ) . getResourceAsStream ( "static/" + customPath) ; assert stream != null ; ByteBuffer buf = ByteBuffer . allocate ( stream. available ( ) ) ; Channels . newChannel ( stream) . read ( buf) ; buf. flip ( ) ; String fileStr = Charset . defaultCharset ( ) . decode ( buf) . toString ( ) ; buf. clear ( ) ; Optional < MediaType > mediaType = MediaTypeFactory . getMediaType ( filename) ; mediaType. ifPresent ( type -> response. setContentType ( type. toString ( ) + ";charset=UTF-8" ) ) ; response. setCharacterEncoding ( "UTF-8" ) ; response. getWriter ( ) . write ( fileStr) ; } }
}
pom.xml
< resources> < resource> < directory> src/main/java</ directory> < includes> < include> **/*.xml</ include> </ includes> </ resource> < resource> < directory> src/main/resources</ directory> < includes> < include> **/*.*</ include> </ includes> </ resource> < resource> < directory> src/main/webapp</ directory> < targetPath> META-INF/resources</ targetPath> < includes> < include> **/*.*</ include> </ includes> </ resource> </ resources>