(158) - 对配置,代码必要的地方添加注释,方便理解
parent
8a826aa0d2
commit
b311d47107
|
@ -7,6 +7,8 @@ import java.io.Serializable;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 定义抽象的 Domain父类, 将公共属性放于些
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractDomain implements Serializable {
|
public abstract class AbstractDomain implements Serializable {
|
||||||
|
@ -17,9 +19,13 @@ public abstract class AbstractDomain implements Serializable {
|
||||||
*/
|
*/
|
||||||
protected int id;
|
protected int id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于实现逻辑删除
|
||||||
|
*/
|
||||||
protected boolean archived;
|
protected boolean archived;
|
||||||
/**
|
/**
|
||||||
* Domain business guid.
|
* Domain business guid.
|
||||||
|
* 业务Id
|
||||||
*/
|
*/
|
||||||
protected String guid = GuidGenerator.generate();
|
protected String guid = GuidGenerator.generate();
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,10 @@ import javax.sql.DataSource;
|
||||||
import static com.monkeyk.sos.infrastructure.CacheConstants.CLIENT_DETAILS_CACHE;
|
import static com.monkeyk.sos.infrastructure.CacheConstants.CLIENT_DETAILS_CACHE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add <i>archived = 0</i> condition
|
* 扩展 默认的 ClientDetailsService, 增加逻辑删除判断( archived = 0)
|
||||||
|
* SQL中添加 <i>archived = 0</i> 条件
|
||||||
|
* <p/>
|
||||||
|
* 增加缓存支持
|
||||||
*
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -13,6 +13,8 @@ import static com.monkeyk.sos.infrastructure.CacheConstants.REFRESH_TOKEN_CACHE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016/7/26
|
* 2016/7/26
|
||||||
|
* <p/>
|
||||||
|
* 扩展默认的 TokenStore, 增加对缓存的支持
|
||||||
*
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -6,6 +6,8 @@ import java.io.Serializable;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 定义OAuth中的 Client, 也称 ClientDetails
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
public class OauthClientDetails implements Serializable {
|
public class OauthClientDetails implements Serializable {
|
||||||
|
|
|
@ -5,6 +5,8 @@ import com.monkeyk.sos.domain.shared.Repository;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 处理 OAuth 相关业务的 Repository
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
public interface OauthRepository extends Repository {
|
public interface OauthRepository extends Repository {
|
||||||
|
|
|
@ -5,6 +5,8 @@ import org.springframework.security.oauth2.common.util.RandomValueStringGenerato
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 随机数生成处理工具
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
public abstract class GuidGenerator {
|
public abstract class GuidGenerator {
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
package com.monkeyk.sos.domain.shared;
|
package com.monkeyk.sos.domain.shared;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 抽象的 Repository 统一接口,
|
||||||
|
* 是一个标记接口
|
||||||
|
* <p/>
|
||||||
|
* Repository是在 DDD 开发模式中定义
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,8 @@ import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Spring Security中的 UserDetails 实现
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
public class WdcyUserDetails implements UserDetails {
|
public class WdcyUserDetails implements UserDetails {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package com.monkeyk.sos.domain.user;
|
package com.monkeyk.sos.domain.user;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 用户权限
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
public enum Privilege {
|
public enum Privilege {
|
||||||
|
|
|
@ -8,6 +8,8 @@ import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 定义用户
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
public class User extends AbstractDomain {
|
public class User extends AbstractDomain {
|
||||||
|
|
|
@ -6,6 +6,8 @@ import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 日期处理工具类
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
public abstract class DateUtils {
|
public abstract class DateUtils {
|
||||||
|
@ -33,7 +35,6 @@ public abstract class DateUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static String toDateText(LocalDate date, String pattern) {
|
public static String toDateText(LocalDate date, String pattern) {
|
||||||
if (date == null || pattern == null) {
|
if (date == null || pattern == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -4,6 +4,8 @@ import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016/3/25
|
* 2016/3/25
|
||||||
|
* <p/>
|
||||||
|
* 处理账号密码, 使用MD5加密
|
||||||
*
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -10,6 +10,8 @@ import org.springframework.stereotype.Service;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* OAuth 业务处理服务对象, 事务拦截也加在这一层
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
@Service("oauthService")
|
@Service("oauthService")
|
||||||
|
|
|
@ -21,6 +21,8 @@ import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 处理用户, 账号, 安全相关业务
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
@Service("userService")
|
@Service("userService")
|
||||||
|
|
|
@ -5,6 +5,8 @@ import org.apache.commons.lang.StringUtils;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Web 层工具类
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
public abstract class WebUtils {
|
public abstract class WebUtils {
|
||||||
|
|
|
@ -47,6 +47,9 @@ import java.util.Map;
|
||||||
* 2016/3/8
|
* 2016/3/8
|
||||||
* <p/>
|
* <p/>
|
||||||
* Restful OAuth API
|
* Restful OAuth API
|
||||||
|
* <p/>
|
||||||
|
* 扩展默认的OAuth 功能, 提供 Restful API,
|
||||||
|
* 可用于在获取access_token时调用
|
||||||
*
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
* @see org.springframework.security.oauth2.provider.endpoint.TokenEndpoint
|
* @see org.springframework.security.oauth2.provider.endpoint.TokenEndpoint
|
||||||
|
|
|
@ -13,6 +13,8 @@ import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016/1/30
|
* 2016/1/30
|
||||||
|
* <p/>
|
||||||
|
* 设置字符编码并记录IP地址
|
||||||
*
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -7,6 +7,9 @@ import org.springframework.security.oauth2.provider.AuthorizationRequest;
|
||||||
import org.springframework.security.oauth2.provider.approval.TokenStoreUserApprovalHandler;
|
import org.springframework.security.oauth2.provider.approval.TokenStoreUserApprovalHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 处理OAuth 中用户授权确认的逻辑
|
||||||
|
* 这在grant_type 为 authorization_code, implicit 会使用到
|
||||||
|
*
|
||||||
* @author Shengzhao Li
|
* @author Shengzhao Li
|
||||||
*/
|
*/
|
||||||
public class OauthUserApprovalHandler extends TokenStoreUserApprovalHandler {
|
public class OauthUserApprovalHandler extends TokenStoreUserApprovalHandler {
|
||||||
|
@ -17,6 +20,13 @@ public class OauthUserApprovalHandler extends TokenStoreUserApprovalHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 这儿扩展了默认的逻辑, 若 OauthClientDetails 中的 trusted 字段为true, 将会自动跳过 授权流程
|
||||||
|
*
|
||||||
|
* @param authorizationRequest AuthorizationRequest
|
||||||
|
* @param userAuthentication Authentication
|
||||||
|
* @return True is approved
|
||||||
|
*/
|
||||||
public boolean isApproved(AuthorizationRequest authorizationRequest, Authentication userAuthentication) {
|
public boolean isApproved(AuthorizationRequest authorizationRequest, Authentication userAuthentication) {
|
||||||
if (super.isApproved(authorizationRequest, userAuthentication)) {
|
if (super.isApproved(authorizationRequest, userAuthentication)) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
|
|
||||||
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
|
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
使用XML方式配置Log4j
|
||||||
|
-->
|
||||||
<!--console-->
|
<!--console-->
|
||||||
<appender name="Console" class="org.apache.log4j.ConsoleAppender">
|
<appender name="Console" class="org.apache.log4j.ConsoleAppender">
|
||||||
<layout class="org.apache.log4j.PatternLayout">
|
<layout class="org.apache.log4j.PatternLayout">
|
||||||
|
|
Loading…
Reference in New Issue