| | |
| | | * |
| | | * <p>防线是结构性的,不是数学上的:任何绕过本数据源另开连接的代码仍能写。 |
| | | * 服务端只读账号(见现场对接清单第七节)是第一道防线,本层是第二道。 |
| | | * |
| | | * <p>{@link DataSource} 接口中与只读边界无关的 JDK 样板方法(日志写出器、登录超时、 |
| | | * 父日志器、{@code unwrap} / {@code isWrapperFor} / {@code toString})直接转发或拒绝驱动对象, |
| | | * 不承载业务语义,因此不单独加方法注释。 |
| | | */ |
| | | public final class ReadOnlyVendorDataSource implements DataSource |
| | | { |
| | |
| | | return audit; |
| | | } |
| | | |
| | | /** 取一条受只读约束的连接;语句白名单在返回的连接代理上生效。 */ |
| | | @Override |
| | | public Connection getConnection() throws SQLException |
| | | { |
| | | return guard(delegate.getConnection()); |
| | | } |
| | | |
| | | /** 同上,按给定账号取连接;账号仍受只读白名单约束。 */ |
| | | @Override |
| | | public Connection getConnection(String username, String password) throws SQLException |
| | | { |