正在显示
20 个修改的文件
包含
1066 行增加
和
3 行删除
@@ -74,6 +74,13 @@ | @@ -74,6 +74,13 @@ | ||
74 | </exclusions> | 74 | </exclusions> |
75 | </dependency> | 75 | </dependency> |
76 | <!--spring boot--> | 76 | <!--spring boot--> |
77 | + <!-- tools--> | ||
78 | + <dependency> | ||
79 | + <groupId>commons-codec</groupId> | ||
80 | + <artifactId>commons-codec</artifactId> | ||
81 | + <version>1.11</version> | ||
82 | + </dependency> | ||
83 | + <!-- tools--> | ||
77 | <!-- alibaba的druid数据库连接池 --> | 84 | <!-- alibaba的druid数据库连接池 --> |
78 | <dependency> | 85 | <dependency> |
79 | <groupId>com.alibaba</groupId> | 86 | <groupId>com.alibaba</groupId> |
1 | +package com.tianbo.warehouse.dao; | ||
2 | + | ||
3 | +import com.tianbo.warehouse.model.PERMISSION; | ||
4 | +import java.math.BigDecimal; | ||
5 | +import java.util.List; | ||
6 | + | ||
7 | +public interface PERMISSIONMapper { | ||
8 | + int deleteByPrimaryKey(BigDecimal permissionId); | ||
9 | + | ||
10 | + int insert(PERMISSION record); | ||
11 | + | ||
12 | + int insertSelective(PERMISSION record); | ||
13 | + | ||
14 | + List<PERMISSION> selectByPrimaryKey(BigDecimal permissionId); | ||
15 | + | ||
16 | + int updateByPrimaryKeySelective(PERMISSION record); | ||
17 | + | ||
18 | + int updateByPrimaryKey(PERMISSION record); | ||
19 | + | ||
20 | + List<PERMISSION> findAll(); | ||
21 | + | ||
22 | + List<PERMISSION> findByUserId(BigDecimal userId); | ||
23 | +} |
1 | +package com.tianbo.warehouse.dao; | ||
2 | + | ||
3 | +import com.tianbo.warehouse.model.ROLE; | ||
4 | +import java.math.BigDecimal; | ||
5 | +import java.util.List; | ||
6 | + | ||
7 | +public interface ROLEMapper { | ||
8 | + int deleteByPrimaryKey(BigDecimal roleId); | ||
9 | + | ||
10 | + int insert(ROLE record); | ||
11 | + | ||
12 | + int insertSelective(ROLE record); | ||
13 | + | ||
14 | + ROLE selectByPrimaryKey(BigDecimal roleId); | ||
15 | + | ||
16 | + int updateByPrimaryKeySelective(ROLE record); | ||
17 | + | ||
18 | + int updateByPrimaryKey(ROLE record); | ||
19 | + | ||
20 | + List<ROLE> findRolesByUserId(BigDecimal userId); | ||
21 | +} |
1 | +package com.tianbo.warehouse.dao; | ||
2 | + | ||
3 | +import com.tianbo.warehouse.model.ROLE; | ||
4 | +import com.tianbo.warehouse.model.USERS; | ||
5 | +import java.math.BigDecimal; | ||
6 | +import java.util.List; | ||
7 | + | ||
8 | +public interface USERSMapper { | ||
9 | + int deleteByPrimaryKey(BigDecimal userId); | ||
10 | + | ||
11 | + int insert(USERS record); | ||
12 | + | ||
13 | + int insertSelective(USERS record); | ||
14 | + | ||
15 | + USERS selectByPrimaryKey(BigDecimal userId); | ||
16 | + | ||
17 | + List<USERS> selectByUsername(String userName); | ||
18 | + | ||
19 | + int updateByPrimaryKeySelective(USERS record); | ||
20 | + | ||
21 | + int updateByPrimaryKey(USERS record); | ||
22 | + | ||
23 | +} |
1 | +package com.tianbo.warehouse.model; | ||
2 | + | ||
3 | +import java.math.BigDecimal; | ||
4 | + | ||
5 | +public class PERMISSION { | ||
6 | + private BigDecimal permissionId; | ||
7 | + | ||
8 | + private String permissionName; | ||
9 | + | ||
10 | + private String permissionSign; | ||
11 | + | ||
12 | + private String description; | ||
13 | + | ||
14 | + private String groupName; | ||
15 | + | ||
16 | + public BigDecimal getPermissionId() { | ||
17 | + return permissionId; | ||
18 | + } | ||
19 | + | ||
20 | + public void setPermissionId(BigDecimal permissionId) { | ||
21 | + this.permissionId = permissionId; | ||
22 | + } | ||
23 | + | ||
24 | + public String getPermissionName() { | ||
25 | + return permissionName; | ||
26 | + } | ||
27 | + | ||
28 | + public void setPermissionName(String permissionName) { | ||
29 | + this.permissionName = permissionName == null ? null : permissionName.trim(); | ||
30 | + } | ||
31 | + | ||
32 | + public String getPermissionSign() { | ||
33 | + return permissionSign; | ||
34 | + } | ||
35 | + | ||
36 | + public void setPermissionSign(String permissionSign) { | ||
37 | + this.permissionSign = permissionSign == null ? null : permissionSign.trim(); | ||
38 | + } | ||
39 | + | ||
40 | + public String getDescription() { | ||
41 | + return description; | ||
42 | + } | ||
43 | + | ||
44 | + public void setDescription(String description) { | ||
45 | + this.description = description == null ? null : description.trim(); | ||
46 | + } | ||
47 | + | ||
48 | + public String getGroupName() { | ||
49 | + return groupName; | ||
50 | + } | ||
51 | + | ||
52 | + public void setGroupName(String groupName) { | ||
53 | + this.groupName = groupName == null ? null : groupName.trim(); | ||
54 | + } | ||
55 | +} |
1 | +package com.tianbo.warehouse.model; | ||
2 | + | ||
3 | +import org.springframework.security.core.GrantedAuthority; | ||
4 | + | ||
5 | +import java.math.BigDecimal; | ||
6 | + | ||
7 | +public class ROLE implements GrantedAuthority{ | ||
8 | + | ||
9 | + private static final long serialVersionUID = -3957539165716897200L; | ||
10 | + | ||
11 | + private BigDecimal roleId; | ||
12 | + | ||
13 | + private String roleName; | ||
14 | + | ||
15 | + private String roleSign; | ||
16 | + | ||
17 | + private String description; | ||
18 | + | ||
19 | + public BigDecimal getRoleId() { | ||
20 | + return roleId; | ||
21 | + } | ||
22 | + | ||
23 | + public void setRoleId(BigDecimal roleId) { | ||
24 | + this.roleId = roleId; | ||
25 | + } | ||
26 | + | ||
27 | + public String getRoleName() { | ||
28 | + return roleName; | ||
29 | + } | ||
30 | + | ||
31 | + public void setRoleName(String roleName) { | ||
32 | + this.roleName = roleName == null ? null : roleName.trim(); | ||
33 | + } | ||
34 | + | ||
35 | + public String getRoleSign() { | ||
36 | + return roleSign; | ||
37 | + } | ||
38 | + | ||
39 | + public void setRoleSign(String roleSign) { | ||
40 | + this.roleSign = roleSign == null ? null : roleSign.trim(); | ||
41 | + } | ||
42 | + | ||
43 | + public String getDescription() { | ||
44 | + return description; | ||
45 | + } | ||
46 | + | ||
47 | + public void setDescription(String description) { | ||
48 | + this.description = description == null ? null : description.trim(); | ||
49 | + } | ||
50 | + | ||
51 | + @Override | ||
52 | + public String getAuthority(){ | ||
53 | + return this.getRoleName(); | ||
54 | + } | ||
55 | +} |
1 | +package com.tianbo.warehouse.model; | ||
2 | + | ||
3 | +import org.springframework.security.core.GrantedAuthority; | ||
4 | +import org.springframework.security.core.authority.SimpleGrantedAuthority; | ||
5 | +import org.springframework.security.core.userdetails.UserDetails; | ||
6 | + | ||
7 | +import java.io.Serializable; | ||
8 | +import java.math.BigDecimal; | ||
9 | +import java.util.ArrayList; | ||
10 | +import java.util.Collection; | ||
11 | +import java.util.Date; | ||
12 | +import java.util.List; | ||
13 | + | ||
14 | +public class USERS implements UserDetails{ | ||
15 | + | ||
16 | + private static final long serialVersionUID = 1L; | ||
17 | + | ||
18 | + private BigDecimal userId; | ||
19 | + | ||
20 | + private String username; | ||
21 | + | ||
22 | + private String password; | ||
23 | + | ||
24 | + private Short state; | ||
25 | + | ||
26 | + private Date creattime; | ||
27 | + | ||
28 | + private String sex; | ||
29 | + | ||
30 | + private String address; | ||
31 | + | ||
32 | + private Date birthday; | ||
33 | + | ||
34 | + private String mobilephone; | ||
35 | + | ||
36 | + private Date updatetime; | ||
37 | + | ||
38 | + private List<ROLE> roles; | ||
39 | + | ||
40 | + public BigDecimal getUserId() { | ||
41 | + return userId; | ||
42 | + } | ||
43 | + | ||
44 | + public void setUserId(BigDecimal userId) { | ||
45 | + this.userId = userId; | ||
46 | + } | ||
47 | + | ||
48 | + @Override | ||
49 | + public String getUsername() { | ||
50 | + return username; | ||
51 | + } | ||
52 | + | ||
53 | + public void setUsername(String username) { | ||
54 | + this.username = username == null ? null : username.trim(); | ||
55 | + } | ||
56 | + | ||
57 | + @Override | ||
58 | + public String getPassword() { | ||
59 | + return password; | ||
60 | + } | ||
61 | + | ||
62 | + public void setPassword(String password) { | ||
63 | + this.password = password == null ? null : password.trim(); | ||
64 | + } | ||
65 | + | ||
66 | + public Short getState() { | ||
67 | + return state; | ||
68 | + } | ||
69 | + | ||
70 | + public void setState(Short state) { | ||
71 | + this.state = state; | ||
72 | + } | ||
73 | + | ||
74 | + public Date getCreattime() { | ||
75 | + return creattime; | ||
76 | + } | ||
77 | + | ||
78 | + public void setCreattime(Date creattime) { | ||
79 | + this.creattime = creattime; | ||
80 | + } | ||
81 | + | ||
82 | + public String getSex() { | ||
83 | + return sex; | ||
84 | + } | ||
85 | + | ||
86 | + public void setSex(String sex) { | ||
87 | + this.sex = sex == null ? null : sex.trim(); | ||
88 | + } | ||
89 | + | ||
90 | + public String getAddress() { | ||
91 | + return address; | ||
92 | + } | ||
93 | + | ||
94 | + public void setAddress(String address) { | ||
95 | + this.address = address == null ? null : address.trim(); | ||
96 | + } | ||
97 | + | ||
98 | + public Date getBirthday() { | ||
99 | + return birthday; | ||
100 | + } | ||
101 | + | ||
102 | + public void setBirthday(Date birthday) { | ||
103 | + this.birthday = birthday; | ||
104 | + } | ||
105 | + | ||
106 | + public String getMobilephone() { | ||
107 | + return mobilephone; | ||
108 | + } | ||
109 | + | ||
110 | + public void setMobilephone(String mobilephone) { | ||
111 | + this.mobilephone = mobilephone == null ? null : mobilephone.trim(); | ||
112 | + } | ||
113 | + | ||
114 | + public Date getUpdatetime() { | ||
115 | + return updatetime; | ||
116 | + } | ||
117 | + | ||
118 | + public void setUpdatetime(Date updatetime) { | ||
119 | + this.updatetime = updatetime; | ||
120 | + } | ||
121 | + | ||
122 | + public List<ROLE> getRoles() { | ||
123 | + return roles; | ||
124 | + } | ||
125 | + | ||
126 | + public void setRoles(List<ROLE> roles) { | ||
127 | + this.roles = roles; | ||
128 | + } | ||
129 | + | ||
130 | + @Override | ||
131 | + public boolean isAccountNonExpired(){ | ||
132 | + return true; | ||
133 | + } | ||
134 | + | ||
135 | + @Override | ||
136 | + public boolean isAccountNonLocked(){ | ||
137 | + return true; | ||
138 | + } | ||
139 | + | ||
140 | + @Override | ||
141 | + public boolean isCredentialsNonExpired(){ | ||
142 | + return true; | ||
143 | + } | ||
144 | + | ||
145 | + @Override | ||
146 | + public boolean isEnabled(){ | ||
147 | + return true; | ||
148 | + } | ||
149 | + | ||
150 | + @Override | ||
151 | + public Collection<? extends GrantedAuthority> getAuthorities(){ | ||
152 | + List<GrantedAuthority> auths = new ArrayList<GrantedAuthority>(); | ||
153 | + List<ROLE> roles = this.getRoles(); | ||
154 | + for (ROLE role : roles) { | ||
155 | + auths.add(new SimpleGrantedAuthority(role.getAuthority())); | ||
156 | + } | ||
157 | + return auths; | ||
158 | + } | ||
159 | +} |
1 | +package com.tianbo.warehouse.security; | ||
2 | + | ||
3 | +import com.tianbo.warehouse.dao.PERMISSIONMapper; | ||
4 | +import com.tianbo.warehouse.dao.USERSMapper; | ||
5 | +import com.tianbo.warehouse.model.PERMISSION; | ||
6 | +import com.tianbo.warehouse.model.USERS; | ||
7 | +import com.tianbo.warehouse.service.UserService; | ||
8 | +import org.springframework.beans.factory.annotation.Autowired; | ||
9 | +import org.springframework.security.core.GrantedAuthority; | ||
10 | +import org.springframework.security.core.authority.SimpleGrantedAuthority; | ||
11 | +import org.springframework.security.core.userdetails.User; | ||
12 | +import org.springframework.security.core.userdetails.UserDetails; | ||
13 | +import org.springframework.security.core.userdetails.UserDetailsService; | ||
14 | +import org.springframework.security.core.userdetails.UsernameNotFoundException; | ||
15 | +import org.springframework.stereotype.Service; | ||
16 | + | ||
17 | +import java.util.ArrayList; | ||
18 | +import java.util.List; | ||
19 | + | ||
20 | +@Service("customuserservice") | ||
21 | +public class CustomUserDetailService implements UserDetailsService { | ||
22 | + | ||
23 | + @Autowired | ||
24 | + UserService userService; | ||
25 | + @Autowired | ||
26 | + PERMISSIONMapper permissionMapper; | ||
27 | + | ||
28 | + @Override | ||
29 | + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { | ||
30 | + | ||
31 | + try { | ||
32 | + USERS user = userService.loadByUsername(username); | ||
33 | + | ||
34 | + //这里是根据用户ID取的权限表,还可以根据用户ID 去角色表 | ||
35 | + List<PERMISSION> permissions = permissionMapper.findByUserId(user.getUserId()); | ||
36 | + List<GrantedAuthority> grantedAuthorities = new ArrayList<>(); | ||
37 | + for (PERMISSION permission : permissions) { | ||
38 | + if (permission != null && permission.getPermissionName() != null) { | ||
39 | + | ||
40 | + GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(permission.getPermissionName()); | ||
41 | + //1:此处将权限信息添加到 GrantedAuthority 对象中,在后面进行全权限验证时会使用GrantedAuthority 对象。 | ||
42 | + grantedAuthorities.add(grantedAuthority); | ||
43 | + } | ||
44 | + } | ||
45 | + return user; | ||
46 | + } catch (UsernameNotFoundException e) { | ||
47 | + | ||
48 | + e.printStackTrace(); | ||
49 | + } | ||
50 | + return null; | ||
51 | + } | ||
52 | +} |
1 | +package com.tianbo.warehouse.security; | ||
2 | + | ||
3 | +import org.springframework.security.access.AccessDecisionManager; | ||
4 | +import org.springframework.security.access.AccessDeniedException; | ||
5 | +import org.springframework.security.access.ConfigAttribute; | ||
6 | +import org.springframework.security.authentication.InsufficientAuthenticationException; | ||
7 | +import org.springframework.security.core.Authentication; | ||
8 | +import org.springframework.security.core.GrantedAuthority; | ||
9 | +import org.springframework.stereotype.Service; | ||
10 | + | ||
11 | +import java.util.Collection; | ||
12 | +import java.util.Iterator; | ||
13 | + | ||
14 | +@Service | ||
15 | +public class MyAccessDecisionManager implements AccessDecisionManager{ | ||
16 | + | ||
17 | + // decide 方法是判定是否拥有权限的决策方法, | ||
18 | + //authentication 是释CustomUserService中循环添加到 GrantedAuthority 对象中的权限信息集合. | ||
19 | + //object 包含客户端发起的请求的requset信息,可转换为 HttpServletRequest request = ((FilterInvocation) object).getHttpRequest(); | ||
20 | + //configAttributes 为MyInvocationSecurityMetadataSource的getAttributes(Object object)这个方法返回的结果,此方法是为了判定用户请求的url 是否在权限表中,如果在权限表中,则返回给 decide 方法,用来判定用户是否有此权限。如果不在权限表中则放行。 | ||
21 | + | ||
22 | + @Override | ||
23 | + public void decide(Authentication authentication, Object object, Collection<ConfigAttribute> configAttributes) throws AccessDeniedException, InsufficientAuthenticationException{ | ||
24 | + | ||
25 | + if(null== configAttributes || configAttributes.size() <=0) { | ||
26 | + return; | ||
27 | + } | ||
28 | + ConfigAttribute c; | ||
29 | + String needRole; | ||
30 | + for(Iterator<ConfigAttribute> iter = configAttributes.iterator(); iter.hasNext(); ) { | ||
31 | + c = iter.next(); | ||
32 | + needRole = c.getAttribute(); | ||
33 | + //authentication 为在注释1 中循环添加到 GrantedAuthority 对象中的权限信息集合 | ||
34 | + for(GrantedAuthority ga : authentication.getAuthorities()) { | ||
35 | + if(needRole.trim().equals(ga.getAuthority())) { | ||
36 | + return; | ||
37 | + } | ||
38 | + } | ||
39 | + } | ||
40 | + throw new AccessDeniedException("no right"); | ||
41 | + } | ||
42 | + | ||
43 | + @Override | ||
44 | + public boolean supports(ConfigAttribute var1){ | ||
45 | + | ||
46 | + return true; | ||
47 | + } | ||
48 | + | ||
49 | + @Override | ||
50 | + public boolean supports(Class<?> var1){ | ||
51 | + return true; | ||
52 | + } | ||
53 | +} |
1 | +package com.tianbo.warehouse.security; | ||
2 | + | ||
3 | +import org.springframework.beans.factory.annotation.Autowired; | ||
4 | +import org.springframework.security.access.SecurityMetadataSource; | ||
5 | +import org.springframework.security.access.intercept.AbstractSecurityInterceptor; | ||
6 | +import org.springframework.security.access.intercept.InterceptorStatusToken; | ||
7 | +import org.springframework.security.web.FilterInvocation; | ||
8 | +import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource; | ||
9 | +import org.springframework.stereotype.Service; | ||
10 | + | ||
11 | +import javax.servlet.*; | ||
12 | +import java.io.IOException; | ||
13 | + | ||
14 | +@Service | ||
15 | +public class MyFilterSecurityInterceptor extends AbstractSecurityInterceptor implements Filter { | ||
16 | + | ||
17 | + @Autowired | ||
18 | + private FilterInvocationSecurityMetadataSource securityMetadataSource; | ||
19 | + | ||
20 | + | ||
21 | + @Autowired | ||
22 | + public void setMyAccessDecisionManager(MyAccessDecisionManager myAccessDecisionManager) { | ||
23 | + super.setAccessDecisionManager(myAccessDecisionManager); | ||
24 | + } | ||
25 | + | ||
26 | + | ||
27 | + @Override | ||
28 | + public void init(FilterConfig filterConfig) throws ServletException { | ||
29 | + | ||
30 | + } | ||
31 | + | ||
32 | + @Override | ||
33 | + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { | ||
34 | + | ||
35 | + FilterInvocation fi = new FilterInvocation(request, response, chain); | ||
36 | + invoke(fi); | ||
37 | + } | ||
38 | + | ||
39 | + | ||
40 | + public void invoke(FilterInvocation fi) throws IOException, ServletException { | ||
41 | +//fi里面有一个被拦截的url | ||
42 | +//里面调用MyInvocationSecurityMetadataSource的getAttributes(Object object)这个方法获取fi对应的所有权限 | ||
43 | +//再调用MyAccessDecisionManager的decide方法来校验用户的权限是否足够 | ||
44 | + InterceptorStatusToken token = super.beforeInvocation(fi); | ||
45 | + try { | ||
46 | +//执行下一个拦截器 | ||
47 | + fi.getChain().doFilter(fi.getRequest(), fi.getResponse()); | ||
48 | + } finally { | ||
49 | + super.afterInvocation(token, null); | ||
50 | + } | ||
51 | + } | ||
52 | + | ||
53 | + @Override | ||
54 | + public void destroy() { | ||
55 | + | ||
56 | + } | ||
57 | + | ||
58 | + @Override | ||
59 | + public Class<?> getSecureObjectClass() { | ||
60 | + return FilterInvocation.class; | ||
61 | + } | ||
62 | + | ||
63 | + @Override | ||
64 | + public SecurityMetadataSource obtainSecurityMetadataSource() { | ||
65 | + return this.securityMetadataSource; | ||
66 | + } | ||
67 | + | ||
68 | +} |
src/main/java/com/tianbo/warehouse/security/MyInvocationSecurityMetadataSourceService.java
0 → 100644
1 | +package com.tianbo.warehouse.security; | ||
2 | + | ||
3 | +import com.tianbo.warehouse.dao.PERMISSIONMapper; | ||
4 | +import com.tianbo.warehouse.model.PERMISSION; | ||
5 | +import org.springframework.beans.factory.annotation.Autowired; | ||
6 | +import org.springframework.security.access.ConfigAttribute; | ||
7 | +import org.springframework.security.access.SecurityConfig; | ||
8 | +import org.springframework.security.web.FilterInvocation; | ||
9 | +import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource; | ||
10 | +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; | ||
11 | +import org.springframework.stereotype.Service; | ||
12 | + | ||
13 | +import javax.servlet.http.HttpServletRequest; | ||
14 | +import java.util.*; | ||
15 | + | ||
16 | +@Service | ||
17 | +public class MyInvocationSecurityMetadataSourceService implements FilterInvocationSecurityMetadataSource{ | ||
18 | + | ||
19 | + @Autowired | ||
20 | + PERMISSIONMapper permissionMapper; | ||
21 | + | ||
22 | + private HashMap<String, Collection<ConfigAttribute>> map =null; | ||
23 | + | ||
24 | + /** | ||
25 | + * 加载权限表中所有权限 | ||
26 | + */ | ||
27 | + public void loadResourceDefine(){ | ||
28 | + map = new HashMap<>(); | ||
29 | + Collection<ConfigAttribute> array; | ||
30 | + ConfigAttribute cfg; | ||
31 | + List<PERMISSION> permissions = permissionMapper.findAll(); | ||
32 | + for(PERMISSION permission : permissions) { | ||
33 | + array = new ArrayList<>(); | ||
34 | + cfg = new SecurityConfig(permission.getPermissionName()); | ||
35 | + //此处只添加了用户的名字,其实还可以添加更多权限的信息,例如请求方法到ConfigAttribute的集合中去。此处添加的信息将会作为MyAccessDecisionManager类的decide的第三个参数。 | ||
36 | + array.add(cfg); | ||
37 | + //用权限的getUrl() 作为map的key,用ConfigAttribute的集合作为 value, | ||
38 | + map.put(permission.getPermissionSign(), array); | ||
39 | + } | ||
40 | + | ||
41 | + } | ||
42 | + | ||
43 | + //此方法是为了判定用户请求的url 是否在权限表中,如果在权限表中,则返回给 decide 方法,用来判定用户是否有此权限。如果不在权限表中则放行。 | ||
44 | + @Override | ||
45 | + public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException { | ||
46 | + if(map ==null) {loadResourceDefine();} | ||
47 | + //object 中包含用户请求的request 信息 | ||
48 | + HttpServletRequest request = ((FilterInvocation) object).getHttpRequest(); | ||
49 | + AntPathRequestMatcher matcher; | ||
50 | + String resUrl; | ||
51 | + for(Iterator<String> iter = map.keySet().iterator(); iter.hasNext(); ) { | ||
52 | + resUrl = iter.next(); | ||
53 | + matcher = new AntPathRequestMatcher(resUrl); | ||
54 | + if(matcher.matches(request)) { | ||
55 | + return map.get(resUrl); | ||
56 | + } | ||
57 | + } | ||
58 | + return null; | ||
59 | + } | ||
60 | + | ||
61 | + @Override | ||
62 | + public Collection<ConfigAttribute> getAllConfigAttributes() { | ||
63 | + return null; | ||
64 | + } | ||
65 | + | ||
66 | + @Override | ||
67 | + public boolean supports(Class<?> clazz) { | ||
68 | + return true; | ||
69 | + } | ||
70 | +} |
1 | +package com.tianbo.warehouse.security; | ||
2 | + | ||
3 | +import org.apache.commons.codec.digest.DigestUtils; | ||
4 | +import org.apache.tomcat.util.security.MD5Encoder; | ||
5 | +import org.springframework.security.crypto.password.PasswordEncoder; | ||
6 | +import org.springframework.stereotype.Service; | ||
7 | + | ||
8 | +@Service(value = "passwordEncodeService") | ||
9 | +public class PasswordEncoderImp implements PasswordEncoder{ | ||
10 | + | ||
11 | + @Override | ||
12 | + public String encode(CharSequence charSequence) { | ||
13 | + String enncodePassword = DigestUtils.md5Hex(charSequence.toString()); | ||
14 | + return enncodePassword; | ||
15 | + } | ||
16 | + | ||
17 | + @Override | ||
18 | + public boolean matches(CharSequence rawPassword, String encodedPassword) { | ||
19 | + //用户输入的登录密码 | ||
20 | + String endcodeInputPass = DigestUtils.md5Hex(rawPassword.toString()); | ||
21 | + return encodedPassword.equals(endcodeInputPass); | ||
22 | + } | ||
23 | +} |
1 | +package com.tianbo.warehouse.security; | ||
2 | + | ||
3 | +import org.springframework.beans.factory.annotation.Autowired; | ||
4 | +import org.springframework.context.annotation.Bean; | ||
5 | +import org.springframework.context.annotation.Configuration; | ||
6 | +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; | ||
7 | +import org.springframework.security.config.annotation.web.builders.HttpSecurity; | ||
8 | +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; | ||
9 | +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; | ||
10 | +import org.springframework.security.core.userdetails.UserDetailsService; | ||
11 | +import org.springframework.security.crypto.password.PasswordEncoder; | ||
12 | +import org.springframework.security.web.access.intercept.FilterSecurityInterceptor; | ||
13 | + | ||
14 | +@Configuration | ||
15 | +@EnableWebSecurity | ||
16 | +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { | ||
17 | + | ||
18 | + @Autowired | ||
19 | + private MyFilterSecurityInterceptor myFilterSecurityInterceptor; | ||
20 | + | ||
21 | + @Autowired | ||
22 | + private PasswordEncoder passwordEncoder; | ||
23 | + | ||
24 | + @Bean | ||
25 | + UserDetailsService customUserService(){ //注册UserDetailsService 的bean | ||
26 | + return new CustomUserDetailService(); | ||
27 | + } | ||
28 | + | ||
29 | + @Override | ||
30 | + protected void configure(AuthenticationManagerBuilder auth) throws Exception { | ||
31 | + //user Details Service验证 | ||
32 | + auth.userDetailsService(customUserService()).passwordEncoder(passwordEncoder); | ||
33 | + } | ||
34 | + | ||
35 | + @Override | ||
36 | + protected void configure(HttpSecurity http) throws Exception { | ||
37 | + http.authorizeRequests() | ||
38 | + .anyRequest().authenticated() //任何请求,登录后可以访问 | ||
39 | + .and() | ||
40 | + .formLogin() | ||
41 | + .loginProcessingUrl("/home") | ||
42 | + .loginPage("/login") | ||
43 | + .failureUrl("/login?error") | ||
44 | + .permitAll() //登录页面用户任意访问 | ||
45 | + .and() | ||
46 | + .logout().permitAll(); //注销行为任意访问 | ||
47 | + http.addFilterBefore(myFilterSecurityInterceptor, FilterSecurityInterceptor.class); | ||
48 | + } | ||
49 | +} |
1 | +package com.tianbo.warehouse.service.imp; | ||
2 | + | ||
3 | +import com.tianbo.warehouse.dao.ROLEMapper; | ||
4 | +import com.tianbo.warehouse.dao.USERSMapper; | ||
5 | +import com.tianbo.warehouse.model.ROLE; | ||
6 | +import com.tianbo.warehouse.model.USERS; | ||
7 | +import com.tianbo.warehouse.service.UserService; | ||
8 | +import org.springframework.beans.factory.annotation.Autowired; | ||
9 | +import org.springframework.stereotype.Service; | ||
10 | + | ||
11 | +import java.util.List; | ||
12 | + | ||
13 | +@Service(value = "userService") | ||
14 | +public class UserServiceImpl implements UserService{ | ||
15 | + | ||
16 | + @Autowired | ||
17 | + private USERSMapper usersMapper; | ||
18 | + | ||
19 | + @Autowired | ||
20 | + private ROLEMapper roleMapper; | ||
21 | + | ||
22 | + @Override | ||
23 | + public USERS loadByUsername(String username){ | ||
24 | + List<USERS> userList = usersMapper.selectByUsername(username); | ||
25 | + | ||
26 | + if (userList != null && userList.size() > 0) { | ||
27 | + USERS user = userList.get(0); | ||
28 | + | ||
29 | + List<ROLE> roleList = roleMapper.findRolesByUserId(user.getUserId()); | ||
30 | + if (roleList!=null && roleList.size()>0){ | ||
31 | + user.setRoles(roleList); | ||
32 | + return user; | ||
33 | + } | ||
34 | + } | ||
35 | + return null; | ||
36 | + | ||
37 | + } | ||
38 | +} |
@@ -42,8 +42,8 @@ spring.datasource.druid.test-on-return=false | @@ -42,8 +42,8 @@ spring.datasource.druid.test-on-return=false | ||
42 | spring.datasource.druid.default-auto-commit=true | 42 | spring.datasource.druid.default-auto-commit=true |
43 | 43 | ||
44 | mybatis.mapper-locations=classpath:mapping/*.xml | 44 | mybatis.mapper-locations=classpath:mapping/*.xml |
45 | -mybatis.type-aliases-package=com.example.demo.model | ||
46 | -logging.level.com.example.demo.mapper=DEBUG | 45 | +mybatis.type-aliases-package=com.tianbo.warehouse.model |
46 | +logging.level.com.tianbo.warehouse.dao=DEBUG | ||
47 | 47 | ||
48 | pagehelper.helper-dialect=oracle | 48 | pagehelper.helper-dialect=oracle |
49 | #pagehelper.auto-dialect=true | 49 | #pagehelper.auto-dialect=true |
1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > | ||
3 | +<mapper namespace="com.tianbo.warehouse.dao.PERMISSIONMapper" > | ||
4 | + <resultMap id="BaseResultMap" type="com.tianbo.warehouse.model.PERMISSION" > | ||
5 | + <id column="PERMISSION_ID" property="permissionId" jdbcType="DECIMAL" /> | ||
6 | + <result column="PERMISSION_NAME" property="permissionName" jdbcType="VARCHAR" /> | ||
7 | + <result column="PERMISSION_SIGN" property="permissionSign" jdbcType="VARCHAR" /> | ||
8 | + <result column="DESCRIPTION" property="description" jdbcType="VARCHAR" /> | ||
9 | + <result column="GROUP_NAME" property="groupName" jdbcType="VARCHAR" /> | ||
10 | + </resultMap> | ||
11 | + <sql id="Base_Column_List" > | ||
12 | + PERMISSION_ID, PERMISSION_NAME, PERMISSION_SIGN, DESCRIPTION, GROUP_NAME | ||
13 | + </sql> | ||
14 | + <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.math.BigDecimal" > | ||
15 | + select | ||
16 | + <include refid="Base_Column_List" /> | ||
17 | + from PERMISSION | ||
18 | + where PERMISSION_ID = #{permissionId,jdbcType=DECIMAL} | ||
19 | + </select> | ||
20 | + <select id="findAll" resultMap="BaseResultMap" > | ||
21 | + select | ||
22 | + <include refid="Base_Column_List" /> | ||
23 | + from PERMISSION | ||
24 | + </select> | ||
25 | + <select id="findByUserId" parameterType="java.math.BigDecimal" resultMap="BaseResultMap"> | ||
26 | + select p.* | ||
27 | + from USERS u | ||
28 | + LEFT JOIN USER_ROLE ur on u.user_id= ur.user_id | ||
29 | + LEFT JOIN ROLE r on ur.role_id=r.role_id | ||
30 | + LEFT JOIN ROLE_PERMISSION rp on rp.role_id=r.role_id | ||
31 | + LEFT JOIN PERMISSION p on p.PERMISSION_ID =rp.permission_id | ||
32 | + where u.USER_ID = #{userId,jdbcType=DECIMAL} | ||
33 | + </select> | ||
34 | + | ||
35 | + <delete id="deleteByPrimaryKey" parameterType="java.math.BigDecimal" > | ||
36 | + delete from PERMISSION | ||
37 | + where PERMISSION_ID = #{permissionId,jdbcType=DECIMAL} | ||
38 | + </delete> | ||
39 | + <insert id="insert" parameterType="com.tianbo.warehouse.model.PERMISSION" > | ||
40 | + insert into PERMISSION (PERMISSION_ID, PERMISSION_NAME, PERMISSION_SIGN, | ||
41 | + DESCRIPTION, GROUP_NAME) | ||
42 | + values (#{permissionId,jdbcType=DECIMAL}, #{permissionName,jdbcType=VARCHAR}, #{permissionSign,jdbcType=VARCHAR}, | ||
43 | + #{description,jdbcType=VARCHAR}, #{groupName,jdbcType=VARCHAR}) | ||
44 | + </insert> | ||
45 | + <insert id="insertSelective" parameterType="com.tianbo.warehouse.model.PERMISSION" > | ||
46 | + insert into PERMISSION | ||
47 | + <trim prefix="(" suffix=")" suffixOverrides="," > | ||
48 | + <if test="permissionId != null" > | ||
49 | + PERMISSION_ID, | ||
50 | + </if> | ||
51 | + <if test="permissionName != null" > | ||
52 | + PERMISSION_NAME, | ||
53 | + </if> | ||
54 | + <if test="permissionSign != null" > | ||
55 | + PERMISSION_SIGN, | ||
56 | + </if> | ||
57 | + <if test="description != null" > | ||
58 | + DESCRIPTION, | ||
59 | + </if> | ||
60 | + <if test="groupName != null" > | ||
61 | + GROUP_NAME, | ||
62 | + </if> | ||
63 | + </trim> | ||
64 | + <trim prefix="values (" suffix=")" suffixOverrides="," > | ||
65 | + <if test="permissionId != null" > | ||
66 | + #{permissionId,jdbcType=DECIMAL}, | ||
67 | + </if> | ||
68 | + <if test="permissionName != null" > | ||
69 | + #{permissionName,jdbcType=VARCHAR}, | ||
70 | + </if> | ||
71 | + <if test="permissionSign != null" > | ||
72 | + #{permissionSign,jdbcType=VARCHAR}, | ||
73 | + </if> | ||
74 | + <if test="description != null" > | ||
75 | + #{description,jdbcType=VARCHAR}, | ||
76 | + </if> | ||
77 | + <if test="groupName != null" > | ||
78 | + #{groupName,jdbcType=VARCHAR}, | ||
79 | + </if> | ||
80 | + </trim> | ||
81 | + </insert> | ||
82 | + <update id="updateByPrimaryKeySelective" parameterType="com.tianbo.warehouse.model.PERMISSION" > | ||
83 | + update PERMISSION | ||
84 | + <set > | ||
85 | + <if test="permissionName != null" > | ||
86 | + PERMISSION_NAME = #{permissionName,jdbcType=VARCHAR}, | ||
87 | + </if> | ||
88 | + <if test="permissionSign != null" > | ||
89 | + PERMISSION_SIGN = #{permissionSign,jdbcType=VARCHAR}, | ||
90 | + </if> | ||
91 | + <if test="description != null" > | ||
92 | + DESCRIPTION = #{description,jdbcType=VARCHAR}, | ||
93 | + </if> | ||
94 | + <if test="groupName != null" > | ||
95 | + GROUP_NAME = #{groupName,jdbcType=VARCHAR}, | ||
96 | + </if> | ||
97 | + </set> | ||
98 | + where PERMISSION_ID = #{permissionId,jdbcType=DECIMAL} | ||
99 | + </update> | ||
100 | + <update id="updateByPrimaryKey" parameterType="com.tianbo.warehouse.model.PERMISSION" > | ||
101 | + update PERMISSION | ||
102 | + set PERMISSION_NAME = #{permissionName,jdbcType=VARCHAR}, | ||
103 | + PERMISSION_SIGN = #{permissionSign,jdbcType=VARCHAR}, | ||
104 | + DESCRIPTION = #{description,jdbcType=VARCHAR}, | ||
105 | + GROUP_NAME = #{groupName,jdbcType=VARCHAR} | ||
106 | + where PERMISSION_ID = #{permissionId,jdbcType=DECIMAL} | ||
107 | + </update> | ||
108 | +</mapper> |
src/main/resources/mapping/ROLEMapper.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > | ||
3 | +<mapper namespace="com.tianbo.warehouse.dao.ROLEMapper" > | ||
4 | + <resultMap id="BaseResultMap" type="com.tianbo.warehouse.model.ROLE" > | ||
5 | + <id column="ROLE_ID" property="roleId" jdbcType="DECIMAL" /> | ||
6 | + <result column="ROLE_NAME" property="roleName" jdbcType="VARCHAR" /> | ||
7 | + <result column="ROLE_SIGN" property="roleSign" jdbcType="VARCHAR" /> | ||
8 | + <result column="DESCRIPTION" property="description" jdbcType="VARCHAR" /> | ||
9 | + </resultMap> | ||
10 | + <sql id="Base_Column_List" > | ||
11 | + ROLE_ID, ROLE_NAME, ROLE_SIGN, DESCRIPTION | ||
12 | + </sql> | ||
13 | + <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.math.BigDecimal" > | ||
14 | + select | ||
15 | + <include refid="Base_Column_List" /> | ||
16 | + from ROLE | ||
17 | + where ROLE_ID = #{roleId,jdbcType=DECIMAL} | ||
18 | + </select> | ||
19 | + <select id="findRolesByUserId" parameterType="java.math.BigDecimal" resultMap="BaseResultMap"> | ||
20 | + SELECT | ||
21 | + R.* | ||
22 | + FROM | ||
23 | + USERS U | ||
24 | + LEFT JOIN USER_ROLE UR ON U .USER_ID = UR.USER_ID | ||
25 | + LEFT JOIN ROLE R ON R.ROLE_ID= UR.ROLE_ID | ||
26 | + where U.USER_ID = #{userId,jdbcType=DECIMAL} | ||
27 | + </select> | ||
28 | + <delete id="deleteByPrimaryKey" parameterType="java.math.BigDecimal" > | ||
29 | + delete from ROLE | ||
30 | + where ROLE_ID = #{roleId,jdbcType=DECIMAL} | ||
31 | + </delete> | ||
32 | + <insert id="insert" parameterType="com.tianbo.warehouse.model.ROLE" > | ||
33 | + insert into ROLE (ROLE_ID, ROLE_NAME, ROLE_SIGN, | ||
34 | + DESCRIPTION) | ||
35 | + values (#{roleId,jdbcType=DECIMAL}, #{roleName,jdbcType=VARCHAR}, #{roleSign,jdbcType=VARCHAR}, | ||
36 | + #{description,jdbcType=VARCHAR}) | ||
37 | + </insert> | ||
38 | + <insert id="insertSelective" parameterType="com.tianbo.warehouse.model.ROLE" > | ||
39 | + insert into ROLE | ||
40 | + <trim prefix="(" suffix=")" suffixOverrides="," > | ||
41 | + <if test="roleId != null" > | ||
42 | + ROLE_ID, | ||
43 | + </if> | ||
44 | + <if test="roleName != null" > | ||
45 | + ROLE_NAME, | ||
46 | + </if> | ||
47 | + <if test="roleSign != null" > | ||
48 | + ROLE_SIGN, | ||
49 | + </if> | ||
50 | + <if test="description != null" > | ||
51 | + DESCRIPTION, | ||
52 | + </if> | ||
53 | + </trim> | ||
54 | + <trim prefix="values (" suffix=")" suffixOverrides="," > | ||
55 | + <if test="roleId != null" > | ||
56 | + #{roleId,jdbcType=DECIMAL}, | ||
57 | + </if> | ||
58 | + <if test="roleName != null" > | ||
59 | + #{roleName,jdbcType=VARCHAR}, | ||
60 | + </if> | ||
61 | + <if test="roleSign != null" > | ||
62 | + #{roleSign,jdbcType=VARCHAR}, | ||
63 | + </if> | ||
64 | + <if test="description != null" > | ||
65 | + #{description,jdbcType=VARCHAR}, | ||
66 | + </if> | ||
67 | + </trim> | ||
68 | + </insert> | ||
69 | + <update id="updateByPrimaryKeySelective" parameterType="com.tianbo.warehouse.model.ROLE" > | ||
70 | + update ROLE | ||
71 | + <set > | ||
72 | + <if test="roleName != null" > | ||
73 | + ROLE_NAME = #{roleName,jdbcType=VARCHAR}, | ||
74 | + </if> | ||
75 | + <if test="roleSign != null" > | ||
76 | + ROLE_SIGN = #{roleSign,jdbcType=VARCHAR}, | ||
77 | + </if> | ||
78 | + <if test="description != null" > | ||
79 | + DESCRIPTION = #{description,jdbcType=VARCHAR}, | ||
80 | + </if> | ||
81 | + </set> | ||
82 | + where ROLE_ID = #{roleId,jdbcType=DECIMAL} | ||
83 | + </update> | ||
84 | + <update id="updateByPrimaryKey" parameterType="com.tianbo.warehouse.model.ROLE" > | ||
85 | + update ROLE | ||
86 | + set ROLE_NAME = #{roleName,jdbcType=VARCHAR}, | ||
87 | + ROLE_SIGN = #{roleSign,jdbcType=VARCHAR}, | ||
88 | + DESCRIPTION = #{description,jdbcType=VARCHAR} | ||
89 | + where ROLE_ID = #{roleId,jdbcType=DECIMAL} | ||
90 | + </update> | ||
91 | +</mapper> |
src/main/resources/mapping/USERSMapper.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > | ||
3 | +<mapper namespace="com.tianbo.warehouse.dao.USERSMapper" > | ||
4 | + <resultMap id="BaseResultMap" type="com.tianbo.warehouse.model.USERS" > | ||
5 | + <id column="USER_ID" property="userId" jdbcType="DECIMAL" /> | ||
6 | + <result column="USERNAME" property="username" jdbcType="VARCHAR" /> | ||
7 | + <result column="PASSWORD" property="password" jdbcType="VARCHAR" /> | ||
8 | + <result column="STATE" property="state" jdbcType="DECIMAL" /> | ||
9 | + <result column="CREATTIME" property="creattime" jdbcType="TIMESTAMP" /> | ||
10 | + <result column="SEX" property="sex" jdbcType="VARCHAR" /> | ||
11 | + <result column="ADDRESS" property="address" jdbcType="VARCHAR" /> | ||
12 | + <result column="BIRTHDAY" property="birthday" jdbcType="TIMESTAMP" /> | ||
13 | + <result column="MOBILEPHONE" property="mobilephone" jdbcType="VARCHAR" /> | ||
14 | + <result column="UPDATETIME" property="updatetime" jdbcType="TIMESTAMP" /> | ||
15 | + </resultMap> | ||
16 | + <sql id="Base_Column_List" > | ||
17 | + USER_ID, USERNAME, PASSWORD, STATE, CREATTIME, SEX, ADDRESS, BIRTHDAY, MOBILEPHONE, | ||
18 | + UPDATETIME | ||
19 | + </sql> | ||
20 | + <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.math.BigDecimal" > | ||
21 | + select | ||
22 | + <include refid="Base_Column_List" /> | ||
23 | + from USERS | ||
24 | + where USER_ID = #{userId,jdbcType=DECIMAL} | ||
25 | + </select> | ||
26 | + <select id="selectByUsername" resultMap="BaseResultMap" parameterType="java.lang.String" > | ||
27 | + select | ||
28 | + <include refid="Base_Column_List" /> | ||
29 | + from USERS | ||
30 | + where USERNAME = #{username,jdbcType=VARCHAR} | ||
31 | + </select> | ||
32 | + <delete id="deleteByPrimaryKey" parameterType="java.math.BigDecimal" > | ||
33 | + delete from USERS | ||
34 | + where USER_ID = #{userId,jdbcType=DECIMAL} | ||
35 | + </delete> | ||
36 | + <insert id="insert" parameterType="com.tianbo.warehouse.model.USERS" > | ||
37 | + insert into USERS (USER_ID, USERNAME, PASSWORD, | ||
38 | + STATE, CREATTIME, SEX, | ||
39 | + ADDRESS, BIRTHDAY, MOBILEPHONE, | ||
40 | + UPDATETIME) | ||
41 | + values (#{userId,jdbcType=DECIMAL}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, | ||
42 | + #{state,jdbcType=DECIMAL}, #{creattime,jdbcType=TIMESTAMP}, #{sex,jdbcType=VARCHAR}, | ||
43 | + #{address,jdbcType=VARCHAR}, #{birthday,jdbcType=TIMESTAMP}, #{mobilephone,jdbcType=VARCHAR}, | ||
44 | + #{updatetime,jdbcType=TIMESTAMP}) | ||
45 | + </insert> | ||
46 | + <insert id="insertSelective" parameterType="com.tianbo.warehouse.model.USERS" > | ||
47 | + insert into USERS | ||
48 | + <trim prefix="(" suffix=")" suffixOverrides="," > | ||
49 | + <if test="userId != null" > | ||
50 | + USER_ID, | ||
51 | + </if> | ||
52 | + <if test="username != null" > | ||
53 | + USERNAME, | ||
54 | + </if> | ||
55 | + <if test="password != null" > | ||
56 | + PASSWORD, | ||
57 | + </if> | ||
58 | + <if test="state != null" > | ||
59 | + STATE, | ||
60 | + </if> | ||
61 | + <if test="creattime != null" > | ||
62 | + CREATTIME, | ||
63 | + </if> | ||
64 | + <if test="sex != null" > | ||
65 | + SEX, | ||
66 | + </if> | ||
67 | + <if test="address != null" > | ||
68 | + ADDRESS, | ||
69 | + </if> | ||
70 | + <if test="birthday != null" > | ||
71 | + BIRTHDAY, | ||
72 | + </if> | ||
73 | + <if test="mobilephone != null" > | ||
74 | + MOBILEPHONE, | ||
75 | + </if> | ||
76 | + <if test="updatetime != null" > | ||
77 | + UPDATETIME, | ||
78 | + </if> | ||
79 | + </trim> | ||
80 | + <trim prefix="values (" suffix=")" suffixOverrides="," > | ||
81 | + <if test="userId != null" > | ||
82 | + #{userId,jdbcType=DECIMAL}, | ||
83 | + </if> | ||
84 | + <if test="username != null" > | ||
85 | + #{username,jdbcType=VARCHAR}, | ||
86 | + </if> | ||
87 | + <if test="password != null" > | ||
88 | + #{password,jdbcType=VARCHAR}, | ||
89 | + </if> | ||
90 | + <if test="state != null" > | ||
91 | + #{state,jdbcType=DECIMAL}, | ||
92 | + </if> | ||
93 | + <if test="creattime != null" > | ||
94 | + #{creattime,jdbcType=TIMESTAMP}, | ||
95 | + </if> | ||
96 | + <if test="sex != null" > | ||
97 | + #{sex,jdbcType=VARCHAR}, | ||
98 | + </if> | ||
99 | + <if test="address != null" > | ||
100 | + #{address,jdbcType=VARCHAR}, | ||
101 | + </if> | ||
102 | + <if test="birthday != null" > | ||
103 | + #{birthday,jdbcType=TIMESTAMP}, | ||
104 | + </if> | ||
105 | + <if test="mobilephone != null" > | ||
106 | + #{mobilephone,jdbcType=VARCHAR}, | ||
107 | + </if> | ||
108 | + <if test="updatetime != null" > | ||
109 | + #{updatetime,jdbcType=TIMESTAMP}, | ||
110 | + </if> | ||
111 | + </trim> | ||
112 | + </insert> | ||
113 | + <update id="updateByPrimaryKeySelective" parameterType="com.tianbo.warehouse.model.USERS" > | ||
114 | + update USERS | ||
115 | + <set > | ||
116 | + <if test="username != null" > | ||
117 | + USERNAME = #{username,jdbcType=VARCHAR}, | ||
118 | + </if> | ||
119 | + <if test="password != null" > | ||
120 | + PASSWORD = #{password,jdbcType=VARCHAR}, | ||
121 | + </if> | ||
122 | + <if test="state != null" > | ||
123 | + STATE = #{state,jdbcType=DECIMAL}, | ||
124 | + </if> | ||
125 | + <if test="creattime != null" > | ||
126 | + CREATTIME = #{creattime,jdbcType=TIMESTAMP}, | ||
127 | + </if> | ||
128 | + <if test="sex != null" > | ||
129 | + SEX = #{sex,jdbcType=VARCHAR}, | ||
130 | + </if> | ||
131 | + <if test="address != null" > | ||
132 | + ADDRESS = #{address,jdbcType=VARCHAR}, | ||
133 | + </if> | ||
134 | + <if test="birthday != null" > | ||
135 | + BIRTHDAY = #{birthday,jdbcType=TIMESTAMP}, | ||
136 | + </if> | ||
137 | + <if test="mobilephone != null" > | ||
138 | + MOBILEPHONE = #{mobilephone,jdbcType=VARCHAR}, | ||
139 | + </if> | ||
140 | + <if test="updatetime != null" > | ||
141 | + UPDATETIME = #{updatetime,jdbcType=TIMESTAMP}, | ||
142 | + </if> | ||
143 | + </set> | ||
144 | + where USER_ID = #{userId,jdbcType=DECIMAL} | ||
145 | + </update> | ||
146 | + <update id="updateByPrimaryKey" parameterType="com.tianbo.warehouse.model.USERS" > | ||
147 | + update USERS | ||
148 | + set USERNAME = #{username,jdbcType=VARCHAR}, | ||
149 | + PASSWORD = #{password,jdbcType=VARCHAR}, | ||
150 | + STATE = #{state,jdbcType=DECIMAL}, | ||
151 | + CREATTIME = #{creattime,jdbcType=TIMESTAMP}, | ||
152 | + SEX = #{sex,jdbcType=VARCHAR}, | ||
153 | + ADDRESS = #{address,jdbcType=VARCHAR}, | ||
154 | + BIRTHDAY = #{birthday,jdbcType=TIMESTAMP}, | ||
155 | + MOBILEPHONE = #{mobilephone,jdbcType=VARCHAR}, | ||
156 | + UPDATETIME = #{updatetime,jdbcType=TIMESTAMP} | ||
157 | + where USER_ID = #{userId,jdbcType=DECIMAL} | ||
158 | + </update> | ||
159 | +</mapper> |
-
请 注册 或 登录 后发表评论