Commit 9cb050ab by fsn

配置完改造的pom

parent e3988d55
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.stylefeng</groupId>
<artifactId>guns</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>filco Maven Webapp</name>
<packaging>war</packaging>
<url>http://maven.apache.org</url>
<packaging>jar</packaging>
<name>guns</name>
<description>guns 的spring boot版本</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.2.6.RELEASE</spring.version>
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
<aspectj.version>1.8.9</aspectj.version>
<shiro.version>1.3.2</shiro.version>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<shiro.version>1.4.0</shiro.version>
<mybatis.plus.version>2.0.8</mybatis.plus.version>
</properties>
<dependencies>
<!--验证码生成-->
<!--spring boot依赖-->
<dependency>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.0</version>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--缓存框架-->
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.3.1</version>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- mock数据和测试 -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.6.6</version>
<scope>test</scope>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.6.6</version>
<scope>test</scope>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- END -->
<!--二维码生成-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.2.1</version>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- END -->
<!-- 生成persistence时用的模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--END-->
<!--mybatis-plus-->
<!--其他依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.0.7</version>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.0</version>
</dependency>
<!--END-->
<!--验证框架-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.2.Final</version>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.3.1</version>
</dependency>
<!--END-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<!--<dependency>-->
<!--<groupId>org.apache.velocity</groupId>-->
<!--<artifactId>velocity</artifactId>-->
<!--<version>1.7</version>-->
<!--</dependency>-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!--END-->
<!-- 数据库和连接池 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.21</version>
</dependency>
<!--END-->
<!-- 日志文件管理包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.23</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--END-->
<!-- 格式化对象,方便输出日志 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.21</version>
</dependency>
<!--END-->
<!--shiro插件 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
......@@ -211,19 +127,15 @@
</exclusion>
</exclusions>
</dependency>
<!--END-->
<!-- 模板引擎 -->
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>2.7.0</version>
</dependency>
<!--END-->
</dependencies>
<build>
<finalName>guns</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
......@@ -234,6 +146,10 @@
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
......@@ -248,4 +164,5 @@
</resources>
</build>
</project>
package com.stylefeng.guns;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GunsApplication {
public static void main(String[] args) {
SpringApplication.run(GunsApplication.class, args);
}
}
package project.config.web;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4;
import org.beetl.ext.spring.BeetlSpringViewResolver;
import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.*;
......@@ -11,7 +7,6 @@ import org.springframework.context.support.ReloadableResourceBundleMessageSource
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.MediaType;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
......@@ -102,14 +97,7 @@ public class SpringMvcConfig extends WebMvcConfigurerAdapter {
}
// messageConverter
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(byteMsgConverter());
converters.add(stringHttpMessageConverter());
converters.add(fastJsonHttpMessageConverter());
super.configureMessageConverters(converters);
}
@Bean
public ByteArrayHttpMessageConverter byteMsgConverter() {
......@@ -126,21 +114,6 @@ public class SpringMvcConfig extends WebMvcConfigurerAdapter {
return stringHttpMessageConverter;
}
@Bean
public FastJsonHttpMessageConverter4 fastJsonHttpMessageConverter() {
FastJsonHttpMessageConverter4 convert = new FastJsonHttpMessageConverter4();
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.TEXT_HTML);
list.add(MediaType.APPLICATION_JSON_UTF8);
convert.setSupportedMediaTypes(list);
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setFeatures(Feature.AllowArbitraryCommas, Feature.AllowUnQuotedFieldNames,
Feature.DisableCircularReferenceDetect);
fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty);
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
convert.setFastJsonConfig(fastJsonConfig);
return convert;
}
}
package com.stylefeng.guns;
import java.util.Random;
/**
* idea的测试
*
* @author fstyle
* @date 2017-03-12 21:28
*/
public class DebugTest {
public static void main(String[] args) {
int temp1 = 100;
int temp2 = 200;
int temp3 = add(temp1,temp2);
System.out.println(temp1);
System.out.println(temp2);
System.out.println(temp3);
Random random = new Random();
random.doubles();
}
public static int add(int i,int j){
int temp3 = i + j;
return temp3;
}
}
package com.stylefeng.guns.cache;
import com.alibaba.fastjson.JSON;
import com.stylefeng.guns.base.BaseTest;
import com.stylefeng.guns.common.constant.cache.Cache;
import com.stylefeng.guns.common.constant.factory.ConstantFactory;
import com.stylefeng.guns.core.cache.CacheKit;
import org.junit.Test;
import java.util.List;
/**
* 缓存测试
*
* @author fengshuonan
* @date 2017-04-24 21:00
*/
public class CacheTest extends BaseTest {
/**
* 测试没有缓存的情况
*
* @author fengshuonan
* @Date 2017/4/24 21:00
*/
@Test
public void testNoCache() {
long beginTIme = System.currentTimeMillis();
//用缓存200万次查询,速度6秒
for (int i = 1; i < 2000000; i++) {
ConstantFactory.me().getSingleRoleName(1);
}
System.out.println(System.currentTimeMillis() - beginTIme);
System.out.println();
CacheKit.removeAll(Cache.CONSTANT);
List constant1 = CacheKit.getKeys(Cache.CONSTANT);
System.out.println(JSON.toJSONString(constant1));
}
}
package com.stylefeng.guns.fastjson;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.stylefeng.guns.common.constant.tips.Tip;
import com.stylefeng.guns.common.constant.tips.SuccessTip;
public class JsonTest {
@Test
public void test(){
Tip tip = new SuccessTip();
System.out.println(JSON.toJSONString(tip));
}
}
package com.stylefeng.guns.mockito;
import com.stylefeng.guns.persistence.dao.UserMapper;
import com.stylefeng.guns.persistence.model.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.modules.junit4.PowerMockRunnerDelegate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import project.config.root.RootSpringConfig;
import javax.annotation.Resource;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;
/**
* 自营车辆测试
*
* @author fengshuonan
* @date 2017-03-23 16:38
*/
@RunWith(PowerMockRunner.class) //使用PowerMockRunner运行时
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) //委派给SpringJUnit4ClassRunner
@ContextConfiguration(classes = RootSpringConfig.class)
@PowerMockIgnore( {"javax.management.*","org.apache.shiro.*"})
@PrepareForTest(TestMockito.class)
public class SuptVehiTest {
@Resource
UserMapper userMapper;
@Test
public void test(){
mockStatic(TestMockito.class);
when(TestMockito.get()).thenReturn("bbb");
System.out.println(TestMockito.get());
User user = userMapper.selectById(1);
System.out.println(user.getAccount());
}
}
class TestMockito{
public static String get(){
return "aaa";
}
}
\ No newline at end of file
package com.stylefeng.guns.rest;
public class Result {
private String status;
private String count;
private String info;
private String infocode;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getInfocode() {
return infocode;
}
public void setInfocode(String infocode) {
this.infocode = infocode;
}
@Override
public String toString() {
return "Result [status=" + status + ", count=" + count + ", info=" + info + ", infocode=" + infocode + "]";
}
}
package com.stylefeng.guns.rest;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4;
public class TestRestTemplate {
public static void main(String[] args) {
FastJsonHttpMessageConverter4 convert = new FastJsonHttpMessageConverter4();
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.TEXT_HTML);
list.add(MediaType.APPLICATION_JSON_UTF8);
convert.setSupportedMediaTypes(list);
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setFeatures(Feature.AllowArbitraryCommas, Feature.AllowUnQuotedFieldNames,
Feature.DisableCircularReferenceDetect);
fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty);
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
convert.setFastJsonConfig(fastJsonConfig);
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(
Charset.forName("UTF-8"));
List<MediaType> list2 = new ArrayList<MediaType>();
list2.add(MediaType.TEXT_PLAIN);
stringHttpMessageConverter.setSupportedMediaTypes(list2);
List<HttpMessageConverter<?>> arrayList = new ArrayList<HttpMessageConverter<?>>();
arrayList.add(stringHttpMessageConverter);
arrayList.add(convert);
RestTemplate restTemplate = new RestTemplate();
restTemplate.setMessageConverters(arrayList);
Result forObject = restTemplate.getForObject("http://restapi.amap.com/v3/assistant/inputtips?output=json&city=010&keywords=招商银行&key=f869cc21fa141530c476d41ede7649ec", Result.class);
System.out.println(forObject);
}
}
package com.stylefeng.guns.rmi;
import java.rmi.RemoteException;
/**
* @author fengshuonan
* @date 2017-03-19 20:16
*/
public interface Bussiness {
String echo(String message) throws RemoteException;
}
package com.stylefeng.guns.rmi;
import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* @author fengshuonan
* @date 2017-03-19 20:17
*/
public class BussinessImpl implements Bussiness, Remote,Serializable {
@Override
public String echo(String message) throws RemoteException {
return "123123123";
}
}
package com.stylefeng.guns.rmi;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
/**
* 远程调用测试
*
* @author fengshuonan
* @date 2017-03-19 20:14
*/
public class RmiTest {
public static void main(String[] args) throws RemoteException, NotBoundException {
Registry registry = LocateRegistry.getRegistry("localhost");
Bussiness bussiness = (Bussiness) registry.lookup("BussinessDemo");
System.out.println(bussiness.echo(""));
}
}
package com.stylefeng.guns.rmi;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
/**
* 远程调用测试
*
* @author fengshuonan
* @date 2017-03-19 20:14
*/
public class Server {
public static void main(String[] args) throws RemoteException, AlreadyBoundException {
while(true){
BussinessImpl bussiness = new BussinessImpl();
UnicastRemoteObject.exportObject(new BussinessImpl(),9999);
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("BussinessDemo",bussiness);
}
}
}
package com.stylefeng.guns.shiro;
import org.springframework.util.Base64Utils;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class Base64Test {
/**
* Shiro 记住密码采用的是AES加密,AES key length 需要是16位,该方法生成16位的key
*/
public static void main(String[] args) {
String keyStr = "guns";
byte[] keys;
try {
keys = keyStr.getBytes("UTF-8");
System.out.println(Base64Utils.encodeToString(Arrays.copyOf(keys, 16)));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
package com.stylefeng.guns.shiro;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.realm.Realm;
/**
* @Description 自定义shiro认证域
* @author fengshuonan
* @date 2016年11月14日 下午1:32:11
*/
public class MyRealm1 implements Realm {
@Override
public String getName() {
return "myrealm1";
}
@Override
public boolean supports(AuthenticationToken token) {
// 仅支持 UsernamePasswordToken 类型的 Token
return token instanceof UsernamePasswordToken;
}
@Override
public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = (String) token.getPrincipal(); // 得到用户名
String password = new String((char[]) token.getCredentials()); // 得到密码
if (!"zhang".equals(username)) {
throw new UnknownAccountException(); // 如果用户名错误
}
if (!"1234".equals(password)) {
throw new IncorrectCredentialsException(); // 如果密码错误
}
// 如果身份认证验证成功,返回一个 AuthenticationInfo 实现;
return new SimpleAuthenticationInfo(username, password, getName());
}
}
\ No newline at end of file
package com.stylefeng.guns.shiro;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.junit.Assert;
import org.junit.Test;
import com.stylefeng.guns.core.shiro.ShiroKit;
/**
* @Description shiro权限管理框架测试
* @author fengshuonan
* @date 2016年11月14日 下午1:21:58
*/
public class ShiroTest {
@Test
public void testHelloworld() {
// 1、获取 SecurityManager 工厂,此处使用 Ini 配置文件初始化 SecurityManager
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro/shiro.ini");
// 2、得到 SecurityManager 实例 并绑定给 SecurityUtils
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
// 3、得到 Subject 及创建用户名/密码身份验证 Token(即用户身份/凭证)
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123");
try {
// 4、登录,即身份验证
subject.login(token);
} catch (AuthenticationException e) {
// 5、身份验证失败
}
Assert.assertEquals(true, subject.isAuthenticated()); // 断言用户已经登录
// 6、退出
subject.logout();
}
@Test
public void randomSaltTest(){
for(int i=0;i<20;i++){
System.out.println(ShiroKit.getRandomSalt(6));
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment